0

我有个问题。当我在双击绘画时更改笔画宽度时,已经绘画的笔画宽度也会发生变化。我想改变笔画宽度而不改变最后一笔画。

这是我的代码:

  package com.example.paint;

    import android.content.Context;
    import android.graphics.Canvas;
    import android.graphics.Color;
    import android.graphics.Paint;
    import android.graphics.Path;
    import android.support.v4.view.GestureDetectorCompat;
    import android.util.AttributeSet;
    import android.util.Log;
    import android.view.GestureDetector;
    import android.view.MotionEvent;
    import android.view.View;
    import android.widget.Toast;

    public class SingleTouchEventView extends View implements GestureDetector.OnGestureListener, GestureDetector.OnDoubleTapListener {

    private Paint paint = new Paint();
    private Path path = new Path();

    private static final String DEBUG_TAG = "Gestures";
    private GestureDetectorCompat mDetector; 

    public SingleTouchEventView(Context context, AttributeSet attrs) {
    super(context, attrs);

    paint.setAntiAlias(true);
    paint.setStrokeWidth(6f);
    paint.setColor(Color.BLACK);
    paint.setStyle(Paint.Style.STROKE);
    paint.setStrokeJoin(Paint.Join.BEVEL);

    mDetector = new GestureDetectorCompat(context, this);

    }

    @Override
    protected void onDraw(Canvas canvas) {
     canvas.drawPath(path, paint);
    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {
    float eventX = event.getX();
    float eventY = event.getY();

    this.mDetector.onTouchEvent(event);
    // Be sure to call the superclass implementation

    switch (event.getAction()) {
    case MotionEvent.ACTION_DOWN:
      path.moveTo(eventX, eventY);
      return true;
    case MotionEvent.ACTION_MOVE:
      path.lineTo(eventX, eventY);
      break;
    case MotionEvent.ACTION_UP:
      // nothing to do
      break;
    default:
      return false;
    }

    // Schedules a repaint.
    invalidate();
    return true;

   }

   @Override
   public boolean onDown(MotionEvent event) { 
      Log.d(DEBUG_TAG,"onDown: " + event.toString()); 
      return false;
   }

   @Override
   public boolean onFling(MotionEvent event1, MotionEvent event2, 
          float velocityX, float velocityY) {
      Log.d(DEBUG_TAG, "onFling: " + event1.toString()+event2.toString());
      return false;
   }

   @Override
   public void onLongPress(MotionEvent event) {
      Log.d(DEBUG_TAG, "onLongPress: " + event.toString()); 
   }

   @Override
   public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX,
          float distanceY) {
      Log.d(DEBUG_TAG, "onScroll: " + e1.toString()+e2.toString());
      return false;
   }

   @Override
   public void onShowPress(MotionEvent event) {
      Log.d(DEBUG_TAG, "onShowPress: " + event.toString());
   }

   @Override
   public boolean onSingleTapUp(MotionEvent event) {
      Log.d(DEBUG_TAG, "onSingleTapUp: " + event.toString());
      return false;
   }

   @Override
   public boolean onDoubleTap(MotionEvent event) {

      float width = paint.getStrokeWidth();
      width++;
      paint.setStrokeWidth(width);
      Log.d(DEBUG_TAG, "onDoubleTap: " + event.toString());
      return true;
   }

   @Override
   public boolean onDoubleTapEvent(MotionEvent event) {
      Log.d(DEBUG_TAG, "onDoubleTapEvent: " + event.toString());
      return false;
   }

   @Override
   public boolean onSingleTapConfirmed(MotionEvent event) {
      Log.d(DEBUG_TAG, "onSingleTapConfirmed: " + event.toString());
      return false;
   }
   } 

这是我的活动

package com.example.paint;

import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
public class MainActivity extends Activity {
  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(new SingleTouchEventView(this, null));
  }

  @Override
  public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
  }
} 
4

1 回答 1

0

目前,您只存储一个Path.

您需要存储多个Paths 及其相关的宽度,以便您可以onDraw为每个不同的路径更改 Paint 的宽度。

于 2013-10-17T10:59:11.057 回答