android map 叠加绘制

标签 android

我制作了一个 map 覆盖类并覆盖了如下所示的 onTouchEvent 方法:

 @Override
    public boolean onTouchEvent(MotionEvent event, MapView mapView) 
    {   
        //TO-DO here we will capture when the users
        //has pointed a point to go..
        if(event.getAction() != MotionEvent.ACTION_MOVE){
            GeoPoint p = mapView.getProjection().fromPixels(
                    (int) event.getX(),
                    (int) event.getY());

                Geocoder geoCoder = new Geocoder(
                    getBaseContext(), Locale.getDefault());
                try {
                    List<Address> addresses = geoCoder.getFromLocation(
                        p.getLatitudeE6()  / 1E6, 
                        p.getLongitudeE6() / 1E6, 1);

                    String add = "";
                    if (addresses.size() > 0) 
                    {
                        for (int i=0; i<addresses.get(0).getMaxAddressLineIndex(); 
                             i++)
                           add += addresses.get(0).getAddressLine(i) + "\n";
                    }
                    Log.e("##################",
                            "screen touched: lat:"+(p.getLatitudeE6()/ 1E6)+"long:"+(p.getLongitudeE6()/ 1E6));
                    showMap((p.getLatitudeE6()/ 1E6),(p.getLongitudeE6()/ 1E6));
                    Toast.makeText(getBaseContext(), add, Toast.LENGTH_SHORT).show();
                }
                catch (IOException e) {                
                    e.printStackTrace();
                }   
                return true;
        }else
            return false;
    }        

问题是每次我在 map 上做一个手势时都会绘制 map ,我只想在点击 map 上的某个点时而不是在拖动 map 时这样做,这种方法是否正确?如何实现?

最佳答案

查看 ACTION_DOWN 和 ACTION_UP here

它们都会告诉您开始和停止的位置,因此您可以像这样进行检查:

float x, y;
if (event.getAction() == MotionEvent.ACTION_DOWN) {
    x = event.getRawX();
    y = event.getRawY();
} else if (event.getAction() == MotionEvent.ACTION_UP) {
    if (((x - event.getRawX()) < threshhold_for_x) &&
        (y - event.getRawY()) < threshhold_for_y)) {

        // touch was in same location

    }
}

无论如何这是一般的想法,当然你需要重置 x 和 y,如果他们做了一个手势并在相同的位置结束,它会触发它......

您可以使用 getDownTime () 使其更好地工作。

关于android map 叠加绘制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3846334/

相关文章:

android - 如何从 fragment 中获取工具栏?

java - 有没有更好的方法在 Android 中显示 %

android - onScroll 事件未针对 ListView 触发

java - 在java,android中使用循环计数器访问变量

java - 如何在带有 Gradle 的 Java 项目中使用 DexGuard

android - 从数组到数据库异常的 jackcess 空字段

android - 一个 OnGestureListener 对象可以处理两个 GestureDetector 对象吗?

android - 如何获取请求者 - android 中配置的 WiFi 网络的 BSSID?

java - 如何在 Java/Android 的回调函数中设置局部变量?

Android adb wireless/WIFI调试操作超时