我目前正在摆弄Android编程,但是在检测不同的触摸事件时遇到了一个小问题,即正常的触摸按下(按下屏幕并立即释放),长按(触摸屏幕并按住手指) ) 和移动(在屏幕上拖动)。
我想做的是在我的屏幕上有一个(圆圈的)图像,我可以拖动它。然后,当我按一次(短按/正常按)时,Toast 会提供一些有关它的基本信息。当我长按它时,会出现一个带有列表的 AlertDialog 来选择不同的图像(圆形、矩形或三角形)。
我用自己的 OnTouchListener 制作了一个自定义视图来检测事件并在 onDraw 中绘制图像。OnTouchListener.onTouch 是这样的:
// has a touch press started?
private boolean touchStarted = false;
// co-ordinates of image
private int x, y;
public boolean onTouch(View v, MotionEvent event) {
int action = event.getAction();
if (action == MotionEvent.ACTION_DOWN) {
touchStarted = true;
}
else if (action == MotionEvent.ACTION_MOVE) {
// movement: cancel the touch press
touchStarted = false;
x = event.getX();
y = event.getY();
invalidate(); // request draw
}
else if (action == MotionEvent.ACTION_UP) {
if (touchStarted) {
// touch press complete, show toast
Toast.makeText(v.getContext(), "Coords: " + x + ", " + y, 1000).show();
}
}
return true;
}
问题是印刷机并没有像预期的那样工作,因为当我随便触摸屏幕时,它也会检测到一点点移动并取消触摸按下并在图像周围移动。
我对此进行了“破解”,我引入了一个新变量“mTouchDelay”,我在 ACTION_DOWN 上将其设置为 0,在 MOVE 中增加,如果在 MOVE 中 >= 3,我将执行我的“移动”代码。但我有一种感觉,这不是真正的方法。
我还没有找到如何检测长按。罪魁祸首确实是似乎总是触发的MOVE。
有关我大致想要的示例,请参阅 Android 应用程序“DailyStrip”:它显示漫画的图像。如果屏幕太大,您可以拖动它。您可以点击它一次以弹出某些控件,然后长按它以打开选项菜单。
PS。我正在尝试让它在 Android 1.5 上运行,因为我的手机只能在 1.5 上运行。