2016-11-09 54 views
-1

我有一個叫DrawingView的類,在那裏我有方法onTouchEvent(MotionEvent event)對觸摸事件作出響應。在這種方法中,我允許用戶在自由模式下繪製,用戶只需觸摸屏幕並自由繪製。 但問題是我想允許用戶繪製幾何圖形,但它也取決於onTouchEvent()方法。如何讓用戶使用手指進行繪製並在Android上繪製幾何圖形?

這裏是方法的代碼:

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

    switch (event.getAction()) { 
     case MotionEvent.ACTION_DOWN: 
      drawPath.moveTo(touchX, touchY); 
      break; 
     case MotionEvent.ACTION_MOVE: 
      drawPath.lineTo(touchX, touchY); 
      break; 
     case MotionEvent.ACTION_UP: 
      drawCanvas.drawPath(drawPath, drawPaint); 
      drawPath.reset(); 
      break; 
     default: 
      return false; 
    } 

    invalidate(); 
    return true; 
} 

現在,我想要做這樣的事情「how to draw circle using Multitouch」,但我不能改變這個方法來做到這一點。 而且圖紙只需保留在一個視圖中。

有一些方法可以讓用戶像這樣畫出來嗎?因爲這兩種類型的繪製取決於運動事件。

回答

0

您需要使動作有所不同,以至於在做出錯誤之前,您可以分辨出他們正在嘗試做哪一個動作。例如,如果一個行爲需要2個手指向下,並且需要一個手指向下,那麼只要他們開始移動他們的第一根手指,就可以假定他們正在做一個手指的行爲。

你真的沒有給我們足夠的信息告訴你如何爲你的情況做到這一點。我可以告訴你,你需要改變onTouchEvent以獲得更多的邏輯 - 嘗試複用觸摸事件最終會產生非常複雜的代碼,通常你會得到某種形式的狀態機。

0

您可以利用Bitmap並將其複製到CanvasonDraw()方法中。爲此,您可以像這樣創建類:

class GraphicsView extends View { 
    private Bitmap buffCanvasBitmap = null; 
    private Canvas buffCanvas = null; 
    private float x = 0; 
    private float y = 0; 
    private float old_x = 0; 
    private float old_y = 0; 
    private Paint paint = new Paint(); 

    public GraphicsView(Context context) { 
     super(context); 
     paint.setColor(Color.BLUE); 
     paint.setTextSize(20); 
     paint.setAntiAlias(true); 
    } 

    @Override 
    public void onDraw(Canvas canvas) { 
     super.onDraw(canvas); 

     if (buffCanvasBitmap == null) { 
      buffCanvasBitmap = Bitmap.createBitmap(getWidth(), getHeight(), Bitmap.Config.ARGB_4444); 
      buffCanvas = new Canvas(buffCanvasBitmap); 
      buffCanvas.drawColor(Color.LTGRAY); 
     } 

     canvas.drawBitmap(buffCanvasBitmap, 0, 0, null); 
    } 

    @Override 
    public boolean onTouchEvent(MotionEvent event) { 
     old_x = x; 
     old_y = y; 

     x = event.getX(); 
     y = event.getY(); 

     switch (event.getAction()) { 
      case MotionEvent.ACTION_DOWN: 
       break; 
      case MotionEvent.ACTION_MOVE: 
       buffCanvas.drawLine(old_x, old_y, x, y, paint); 
       break; 
      case MotionEvent.ACTION_UP: 
      case MotionEvent.ACTION_CANCEL: 
       break; 
     } 
     invalidate(); 
     return true; 
    } 
} 

和比這種方式使用它,例如,在你的Activity

public GraphicsView gv; 
... 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    requestWindowFeature(Window.FEATURE_NO_TITLE); 

    gv = new GraphicsView(this); 
    setContentView(gv); 
} 

,你可以在屏幕上直接繪製。