android - 带有触摸事件的自定义 View 不起作用

标签 android

我尝试使用 TouchEvent 制作一个简单的自定义 View 。但是,如果我单击 n 拖动鼠标光标,则不会绘制任何内容。这是我应该在模拟器上测试 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;
      }
}

最佳答案

我在我的模拟器中试过这段代码并且它有效,请记住在模拟器 View 上移动鼠标时按住左键:

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

关于android - 带有触摸事件的自定义 View 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12622683/

相关文章:

android - flutter 复选框在无状态小部件中不起作用

java - 在不发布更新的情况下更改 PlayStore 中的新功能部分

android - 如何在 InputMethodManager#hideSoftInputFromWindow 中使用 ResultReceiver

android - Intellij插件生成Android项目性质

Android NDK 应用加载库失败

java - 应用程序被删除时的消息

java - 错误类型3 : Activity Class {…} does not exist in Eclipse

java - 如何在android中使用加速度计跟踪路径?

android - ProgressBar 在 FrameLayout 之上

Android 5.0 (API 21) 无法呈现自定义字体/字体