【发布时间】:2026-01-22 22:25:01
【问题描述】:
我正在创建一个自定义 UI 组件,用户可以在其中上传地图图像,然后用户可以指定某些位置并显示图钉。首先,加载地图的图像后,用户将能够平移和缩放到任何位置。为此,我使用了以下示例,它就像一个魅力。 TouchImageView
下一部分是在图像上长按时添加一个图钉。为此,我在地图图像上使用了绝对布局,并在最后添加了一个 OnTouchListener 和 Returned false,以便 ImageView 上的触摸侦听器也能正常工作。我实现了 OnTouchListener 如下
absoluteLayout.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, final MotionEvent event) {
switch (event.getAction()){
case MotionEvent.ACTION_DOWN:
count=-1;// reset count. Thredd will start as 0
released = false;// Touch long press is started
final Handler handler = new Handler();
new Thread(new Runnable() {
@Override
public void run() {
while(!released){//Stop count if touch released
try {
count++;// Count every 200 ms
Thread.sleep(200);
if(count>10){ //if pressed for 200*10= 2 seconds
released=true;
handler.post(new Runnable() {
@Override
public void run() {
addPin((int) event.getX(), (int) event.getY());//Calling the method to add the pin
}
});
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}).start();
break;
case MotionEvent.ACTION_UP:
released=true;// touch is released
break;
case MotionEvent.ACTION_MOVE:
released=true; // touch is a movement therefore release long press
break;
}
return false;
}
});
但这里的问题是使用 case :"MotionEvent.ACTION_MOVE" 它总是使长按释放。但是如果没有它,如果用户尝试平移或缩放 imageView,它将添加一个图钉。
当用户缩放或平移地图时,如何检测触摸是否有移动并忽略?
提前致谢。
【问题讨论】: