2016-11-09 14 views
-1

私はDrawingViewと呼ばれるクラスを持っています。ここではtouchイベントに応答するメソッド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」のような何かをしたいが、私はこれを行うには、この方法を変更することはできません。 図面は1つのビューにのみ存在する必要があります。

ユーザーがこのような細い線を描くことを許可する方法はありますか? 2種類の描画はモーションイベントに依存するためです。

答えて

0

誤った動きをする前にどちらの動きをしようとしているのかを知るには、動きが異なるようにする必要があります。たとえば、1つの動作で2本の指がダウンし、1本の指がダウンしなければならない場合、最初の指を動かすとすぐに、1本の指の動作をしているとみなすことができます。

あなたの事件のための方法を教えるのに十分な情報はありません。タッチイベントを多重化しようとすると、その内部の非常に複雑なコードで終わることがあります。通常は、ある種の状態マシンで終わります。

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); 
} 

とあなたは、画面上に直接描画することができます。

関連する問題