如何在动作移动 android 时禁用自动绘图 onTouchEvent?
How to disable auto drawing onTouchEvent on action move android?
请查看取自 View
、
的覆盖 onTouchEvent
的代码示例
@Override
public boolean onTouchEvent(MotionEvent event) {
float eventX = event.getX();
float eventY = event.getY();
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
//code move pointer position
break;
case MotionEvent.ACTION_MOVE:
// code to draw line from x to y
break;
case MotionEvent.ACTION_UP:
//Release pointer
break;
default:
return false;
}
}
这画得很好,但问题是当我用一根手指触摸一个角并用另一根手指触摸屏幕的下一个角并按住它然后松开第一根手指时。它会自动从一根手指到另一根手指画线。但在我的应用程序中,用户必须使用单指手动画线。
事情是这样的
为了克服这个问题,我尽我所能。这既不是 Multitouch
事件。
这是Android框架的错吗?
另外:
我从 Playstore 下载了许多绘图应用程序,以检查它们是否阻止了此类自动绘图。但是所有的应用程序都和我的一样。
我该如何解决这个问题?
不管你怎么说,你是 运行多点触控事件。在 Android 中,初始着陆是 ACTION_DOWN。第二次触摸是 ACTION_POINTER_DOWN。此后的任何移动,即使是单个像素,任何一个手指都会导致 ACTION_MOVE。所以你或多或少会得到不断的动作。解决方案是使用指针 id 来确定哪个手指是第一个按下的手指,并且只在获得 MOVE 时查看该指针 id,忽略其中的所有其他指针。
您只需添加 case MotionEvent.ACTION_POINTER_UP
并释放您的积分。
当你的case在case MotionEvent.ACTION_POINTER_UP
的时候,这时候你抬起手指,程序会在action_move的时候运行,这时候你就中断这个动作了。
我的例子是这样的:
boolean isRelease = false;
@Override public boolean onTouchEvent(MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
isRelease = false;
//code move pointer position
break;
case MotionEvent.ACTION_MOVE:
if (isRelease) {
return true;
}
// code to draw line from x to y
break;
case MotionEvent.ACTION_POINTER_UP:
isRelease = true;
//Release pointer
break;
case MotionEvent.ACTION_UP:
isRelease = true;
//Release pointer
break;
}
return true;
}
抱歉我的英语不好。
请查看取自 View
、
onTouchEvent
的代码示例
@Override
public boolean onTouchEvent(MotionEvent event) {
float eventX = event.getX();
float eventY = event.getY();
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
//code move pointer position
break;
case MotionEvent.ACTION_MOVE:
// code to draw line from x to y
break;
case MotionEvent.ACTION_UP:
//Release pointer
break;
default:
return false;
}
}
这画得很好,但问题是当我用一根手指触摸一个角并用另一根手指触摸屏幕的下一个角并按住它然后松开第一根手指时。它会自动从一根手指到另一根手指画线。但在我的应用程序中,用户必须使用单指手动画线。
事情是这样的
为了克服这个问题,我尽我所能。这既不是 Multitouch
事件。
这是Android框架的错吗?
另外:
我从 Playstore 下载了许多绘图应用程序,以检查它们是否阻止了此类自动绘图。但是所有的应用程序都和我的一样。
我该如何解决这个问题?
不管你怎么说,你是 运行多点触控事件。在 Android 中,初始着陆是 ACTION_DOWN。第二次触摸是 ACTION_POINTER_DOWN。此后的任何移动,即使是单个像素,任何一个手指都会导致 ACTION_MOVE。所以你或多或少会得到不断的动作。解决方案是使用指针 id 来确定哪个手指是第一个按下的手指,并且只在获得 MOVE 时查看该指针 id,忽略其中的所有其他指针。
您只需添加 case MotionEvent.ACTION_POINTER_UP
并释放您的积分。
当你的case在case MotionEvent.ACTION_POINTER_UP
的时候,这时候你抬起手指,程序会在action_move的时候运行,这时候你就中断这个动作了。
我的例子是这样的:
boolean isRelease = false;
@Override public boolean onTouchEvent(MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
isRelease = false;
//code move pointer position
break;
case MotionEvent.ACTION_MOVE:
if (isRelease) {
return true;
}
// code to draw line from x to y
break;
case MotionEvent.ACTION_POINTER_UP:
isRelease = true;
//Release pointer
break;
case MotionEvent.ACTION_UP:
isRelease = true;
//Release pointer
break;
}
return true;
}
抱歉我的英语不好。