gpt4 book ai didi

android - 我如何响应 Android MapView 上的点击,但忽略双指缩放?

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:53:30 26 4
gpt4 key购买 nike

我在 Activity 中有一个 MapView,它工作正常, map 显示,它响应点击,我可以轻松提取位置。然而,此处理程序也会响应双指缩放,因此如果用户尝试双指缩放,应用程序会像点击一样做出响应(这让他们很困惑)。

我怎样才能响应 MapView 上的点击并只接受单击,特别是忽略双指缩放和双击?

我需要使用 OnTouchEvent() 而不是 OnTap() 吗?如果是这样,我如何区分不同的触摸事件,以及如何访问 GeoPoint?

这是我的 MapActivity 中的代码:

class MapOverlay extends com.google.android.maps.Overlay
{
@Override
public boolean onTap(GeoPoint p, MapView map)
{
if ( p!=null )
{
// Do stuff with the geopoint
return true; // We handled the tap
}
else
{
return false; // We didn't handle the tap
}
}
}

最佳答案

经过大量的摸索和尝试各种方法后,这个方法目前运行良好。代码遵循运动事件。当我们收到一个 ACTION_DOWN 事件时,它会将 isPinch 标志标记为 false(我们还不知道它是否是捏合),但是一旦我们收到涉及两根手指的触摸事件(即 ACTION_MOVE),isPinch 就会设置为true,因此当 onTap() 事件触发时,它可以查看是否存在挤压。

class MapOverlay extends com.google.android.maps.Overlay
{
private boolean isPinch = false;

@Override
public boolean onTap(GeoPoint p, MapView map){
if ( isPinch ){
return false;
}else{
Log.i(TAG,"TAP!");
if ( p!=null ){
handleGeoPoint(p);
return true; // We handled the tap
}else{
return false; // Null GeoPoint
}
}
}

@Override
public boolean onTouchEvent(MotionEvent e, MapView mapView)
{
int fingers = e.getPointerCount();
if( e.getAction()==MotionEvent.ACTION_DOWN ){
isPinch=false; // Touch DOWN, don't know if it's a pinch yet
}
if( e.getAction()==MotionEvent.ACTION_MOVE && fingers==2 ){
isPinch=true; // Two fingers, def a pinch
}
return super.onTouchEvent(e,mapView);
}

}

关于android - 我如何响应 Android MapView 上的点击,但忽略双指缩放?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4806061/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com