2015-05-29 16 views
0

我有一个绘制线条的应用程序。当我按下屏幕时,削减我的手指并停止触摸,它画出一条线。我想知道如何在我将屏幕上的手指削减时看到正在绘制的线条。在绘制时用预览绘制直线

这是我的代码绘制线条:

public class DrawingView extends View { 

    private Path drawPath; 
    private Paint drawPaint; 
    private Paint canvasPaint; 
    private int paintColor=Color.BLACK; 
    private Canvas drawCanvas; 
    private Bitmap canvasBitmap; 
    float tX; 
    float tY; 

    public DrawingView(Context context, AttributeSet attrs){ 
     super(context, attrs); 
     setupDrawing(); 
    } 

    private void setupDrawing(){ 
     drawPath=new Path(); 
     drawPaint=new Paint(); 
     drawPaint.setColor(paintColor); 
     drawPaint.setAntiAlias(true); 
     drawPaint.setStrokeWidth(1); 
     drawPaint.setStyle(Paint.Style.STROKE); 
     drawPaint.setStrokeJoin(Paint.Join.ROUND); 
     drawPaint.setStrokeCap(Paint.Cap.ROUND); 
     canvasPaint=new Paint(Paint.DITHER_FLAG); 
    } 

    protected void onSizeChanged(int w, int h, int oldw, int oldh){ 
     super.onSizeChanged(w, h, oldw, oldh); 
     canvasBitmap=Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888); 
     drawCanvas=new Canvas(canvasBitmap); 
    } 


    protected void onDraw(Canvas canvas){ 
     canvas.drawBitmap(canvasBitmap, 0, 0, canvasPaint); 
     canvas.drawPath(drawPath, drawPaint); 
    } 

    private void touch_start(float x, float y){ 
     drawPath.reset(); 
     drawPath.moveTo(x, y); 
     mX=x; 
     mY=y; 
    } 

    private void touch_move(float x, float y){ 
     float dx=Math.abs(x-mX); 
     float dy=Math.abs(y-mY); 
     if(dx>=TOUCH_TOLERANCE||dy>=TOUCH_TOLERANCE){ 
      mX=x; 
      mY=y; 
     } 
    } 

    private void touch_up(){ 
     drawPath.lineTo(mX, mY); 
     drawCanvas.drawPath(drawPath, drawPaint); 
     drawPath.reset(); 
    } 

    public boolean onTouchEvent(MotionEvent event){ 
     tX=event.getX(); 
     tY=event.getY(); 
     switch(event.getAction()){ 
      case MotionEvent.ACTION_DOWN: 
       touch_start(tX,tY); 
      break; 
      case MotionEvent.ACTION_MOVE: 
       touch_move(tX,tY); 
      break; 
      case MotionEvent.ACTION_UP: 
       touch_up(); 
      break; 
      default: 
       return false; 
     } 
     invalidate(); 
     return true; 
    } 
} 
+0

请充分类代码... – ravi

+0

我刚才编辑的代码与全类代码 – malaka

回答

2
public class DrawingView extends View { 

    private static final float TOUCH_TOLERANCE = 0; 
    private Path drawPath; 
    private Paint drawPaint; 
    private Paint canvasPaint; 
    private int paintColor=Color.BLACK; 
    private Canvas drawCanvas; 
    private Bitmap canvasBitmap; 
    float tX; 
    float tY; 
    private float mX; 
    private float mY; 

    private float a,b; 

    public DrawingView(Context context, AttributeSet attrs){ 
     super(context, attrs); 
     setupDrawing(); 
    } 

    private void setupDrawing(){ 
     drawPath=new Path(); 
     drawPaint=new Paint(); 
     drawPaint.setColor(paintColor); 
     drawPaint.setAntiAlias(true); 
     drawPaint.setStrokeWidth(1); 
     drawPaint.setStyle(Paint.Style.STROKE); 
     drawPaint.setStrokeJoin(Paint.Join.ROUND); 
     drawPaint.setStrokeCap(Paint.Cap.ROUND); 
     canvasPaint=new Paint(Paint.DITHER_FLAG); 
    } 

    protected void onSizeChanged(int w, int h, int oldw, int oldh){ 
     super.onSizeChanged(w, h, oldw, oldh); 
     canvasBitmap=Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888); 
     drawCanvas=new Canvas(canvasBitmap); 
    } 


    protected void onDraw(Canvas canvas){ 
     canvas.drawBitmap(canvasBitmap, 0, 0, canvasPaint); 
     canvas.drawPath(drawPath, drawPaint); 
    } 

    private void touch_start(float x, float y){ 
     drawPath.reset(); 
     drawPath.moveTo(x, y); 
     mX=x; 
     mY=y; 
     a=x; 
     b=y; 
    } 

    private void touch_move(float x, float y){ 
     float dx=Math.abs(x-mX); 
     float dy=Math.abs(y-mY); 
     if(dx>=TOUCH_TOLERANCE||dy>=TOUCH_TOLERANCE){ 
      mX=x; 
      mY=y; 
     } 
     drawPath.lineTo(mX, mY); 
     //invalidate(); 
    } 

    private void touch_up(float tX2, float tY2){ 
     drawPath.lineTo(mX, mY); 
     //drawCanvas.drawPath(drawPath, drawPaint); 
     drawCanvas.drawLine(a, b, tX2, tY2, drawPaint); 
     drawPath.reset(); 
    } 

    public boolean onTouchEvent(MotionEvent event){ 
     tX=event.getX(); 
     tY=event.getY(); 
     switch(event.getAction()){ 
      case MotionEvent.ACTION_DOWN: 
       touch_start(tX,tY); 
      break; 
      case MotionEvent.ACTION_MOVE: 
       touch_move(tX,tY); 
      break; 
      case MotionEvent.ACTION_UP: 
       touch_up(tX,tY); 
      break; 
      default: 
       return false; 
     } 
     invalidate(); 
     return true; 
    } 
} 

请试试这个...

+0

它绘制了一条“自由手”线,而不是一条直线。我想我没有详细说明,对不起 – malaka

+0

不,它只是画自由手线..你只是画线时移动..一旦运行它 – ravi

+0

它抽出手,但我需要直。如果没有预览,它会绘制一条直线,我想要预览该直线。 – malaka