Android视图画布onTouchEvent

Android视图画布onTouchEvent,android,Android,我正在尝试做一个愚蠢的应用程序,其中使用Canvas绘制的“HelloWorld!!”字符串会移动。字符串的位置(x\u new,y\u new)只是它的旧位置(x\u old,y\u old)加上(x,y)事件返回的(x,y)。问题是事件操作\u UP无法识别。Log.d()函数总是打印类似于motionEvent(28254):motionEvent{4050df70 action=4x=354.0y=415.0 pressure=0.2000002 size=0.266668}其中acti

我正在尝试做一个愚蠢的应用程序,其中使用
Canvas
绘制的“
HelloWorld!!
”字符串会移动。字符串的位置
(x\u new,y\u new)
只是它的旧位置
(x\u old,y\u old)
加上
(x,y)
事件返回的
(x,y)
。问题是事件
操作\u UP
无法识别。
Log.d()
函数总是打印类似于
motionEvent(28254):motionEvent{4050df70 action=4x=354.0y=415.0 pressure=0.2000002 size=0.266668}
其中
action=4
永不更改。你有什么建议吗?谢谢

class myView extends View {

private Canvas canvas;
    private int x;
private int y;

public HUDView(Context context) {
   super(context);
   this.x=5;
   this.y=5;    

}


protected void onDraw(Canvas canvas) {
    this.canvas=canvas;
    this.canvas.drawText("HelloWorld!!", x, y, mLoadPaint);
}

@Override
public boolean onTouchEvent( MotionEvent event) {
    super.onTouchEvent(event);
    Log.d("motionEvent", event.toString());
    if (event.getAction()==MotionEvent.ACTION_UP){
        Log.d("motionEvent", "action_up");
            this.x+=(int)event.getX();
            this.y+=(int)event.getY();
        return true;
    }
    this.postInvalidate();
    return true;
}


}
  • 不需要全局变量画布(您在不随视图更新的画布上绘制)

  • 在OnTuchen中,即使操作已启动,您也会返回true而不进行后期验证

  • 构造函数的名称错误

  • 就目前的问题而言,您的代码无法运行。不过这应该行得通

    class myView extends View {
    
      private int x;
      private int y;
    
      public myView (Context context) {
        super(context);
           this.x=5;
           this.y=5;    
      }
    
     @Override
     protected void onDraw(Canvas canvas){
             canvas.drawText("HelloWorld!!", x, y, mLoadPaint);
     }
    
     @Override
    public boolean onTouchEvent( MotionEvent event) {
         super.onTouchEvent(event);
          Log.d ("motionEvent", event.toString());
            if (event.getAction()==MotionEvent.ACTION_UP){
            Log.d("motionEvent", "action_up");
            this.x+=(int)event.getX();
            this.y+=(int)event.getY();
           }
          this.postInvalidate();
         return true;
      }
    
    }
    

    使用失效后失效在线程中使用

    感谢您的回答,并为错误道歉@CarlSaldanha代码对我不起作用即使有你的建议也不行。我仍然只有'action=4'运动事件'action=4'代表外部的动作\u。这意味着您在部署此视图时犯了错误,动作发生在外部。请阅读此处的更多信息