4

TouchEventで簡単なカスタムビューを作ってみました。しかし、マウスカーソルをクリックしてドラッグすると、何も描画されません。これは、エミュレータで TouchEvent をテストする方法ですか? または、実際のデバイスでアプリを実行する必要があります (アプリも動作していません)。ありがとう

public class TouchEventView extends View {

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

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

        paint.setAntiAlias(true);
        paint.setColor(Color.WHITE);
        paint.setStyle(Paint.Style.STROKE);
        paint.setStrokeJoin(Paint.Join.ROUND);
        paint.setStrokeWidth(5f);
      }


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

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

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

1 に答える 1

1

エミュレーターでこのコードを試しましたが、機能します。エミュレータービューでマウスを動かす間は、左ボタンを押したままにしてください。

@Override
public boolean onTouchEvent(MotionEvent event) {
    int action = event.getAction() & MotionEvent.ACTION_MASK;
    switch(action) {
        case MotionEvent.ACTION_DOWN : {
            path.moveTo(event.getX(), event.getY());
            break;
        }
        case MotionEvent.ACTION_MOVE : {
            path.lineTo(event.getX(), event.getY());
            break;
        }

    }

    invalidate();
    return true;
}


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

private void init() {
    myPaint = new Paint();
    myPaint.setStyle(Paint.Style.STROKE);
    myPaint.setColor(Color.CYAN);
}
于 2012-09-28T08:50:54.437 に答える