我目前正在研究Android编程,但是在检测不同的触摸事件时遇到了一个小问题,即正常的触摸按下(在屏幕上按下并立即释放),长按(触摸屏幕并用手指按住它) )和移动(在屏幕上拖动)。
我想做的是在屏幕上放一个(圆的)图像,然后可以拖动它。然后,当我按一下(短按/普通按)时,Toast会提供一些有关它的基本信息。长按它时,会出现一个带有列表的AlertDialog,以选择其他图像(圆形,矩形或三角形)。
我使用自己的OnTouchListener制作了一个自定义View,以检测事件并在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中将其设置为0,然后在MOVE中将其设置为大于等于3,就执行了“ move”代码。但是我有种感觉,这并不是真正的方法。
我还没有发现如何检测长按。真正的罪魁祸首是似乎总是触发的MOVE。
有关我大致想要的示例,请参见Android应用程序“ DailyStrip”:它显示了漫画的图像。如果屏幕太大,可以拖动它。您可以点击一次以弹出某些控件,然后长按它以显示选项菜单。
PS。我正在尝试使其在Android 1.5上运行,因为我的手机仅在1.5上运行。
江户川乱折腾