android - 为什么 Touch 在谷歌地图 v2 上不起作用?

标签 android google-maps-android-api-2

我正在开发 Google map v2。

我需要在 map 触摸上做一些事情,但我无法获取 Google map v2 的触摸监听器。

我正在膨胀包含 XML fragment 的 XML。

我的代码如下:

  public class MapViewHelper {

    private FragmentActivity objactivity;
    public GoogleMap myMap=null;


    public MapViewHelper(FragmentActivity objactivity) {
        this.objactivity = objactivity;
    }

    /*
     * @return view of map
     * 
     * @author Sandeep Tiwari
     */
    public View getMapView() {
        View objView = View.inflate(objactivity, R.layout.homemapview, null);
        return objView;
    }

    public GoogleMap getMap()
    {
        if (myMap == null) {
            // Try to obtain the map from the SupportMapFragment.
            myMap = ((SupportMapFragment)this.objactivity.getSupportFragmentManager().findFragmentById(R.id.map))
                    .getMap();
    }
        return myMap;
    }


       public class MySupportMapFragment extends SupportMapFragment {
        public View mOriginalContentView;
        public TouchableWrapper mTouchView;

        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup parent,
                Bundle savedInstanceState) {
            mOriginalContentView = super.onCreateView(inflater, parent,
                    savedInstanceState);
            mTouchView = new TouchableWrapper(getActivity());
            mTouchView.addView(mOriginalContentView);
            return mTouchView;
        }

        @Override
        public View getView() {
            return mOriginalContentView;
        }
    }

  public class TouchableWrapper extends FrameLayout {

    public TouchableWrapper(Context context) {
        super(context);
    }

    @Override
    public boolean dispatchTouchEvent(MotionEvent ev) {
        switch (ev.getAction()) {
        case MotionEvent.ACTION_DOWN:
            ((MainActivity) objactivity).MotionDown(ev);
            break;

            case MotionEvent.ACTION_POINTER_DOWN:
                ((MainActivity) objactivity).MotionPointerDown(ev);
                break;

            case MotionEvent.ACTION_UP:
            case MotionEvent.ACTION_POINTER_UP:
                ((MainActivity)objactivity).MotionUp(ev);
                break;

            case MotionEvent.ACTION_MOVE:
                ((MainActivity)objactivity).ActionMove(ev);
                break;

            }
            return super.dispatchTouchEvent(ev);
        }
    }
}

这是我的 java 类,我在其中填充 xml:-

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content" >

     <fragment
        android:id="@+id/map"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        class="com.google.android.gms.maps.SupportMapFragment"
        />

</RelativeLayout>

但是当我触摸 map 放大缩小 map 时,没有任何人执行任何操作来指导我。 提前致谢。

最佳答案

我将我的 xml 更改为:-

 <fragment
        android:id="@+id/map"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        class="com.fd.viewhelper.MapViewHelper"
        />

这里 com.fd.viewhelper.MapViewHelper 是扩展 SupportMapFragment 并重写其方法的类名,这里运行该类的代码:-

package com.fd.viewhelper;


public class MapViewHelper extends SupportMapFragment {

    private FragmentActivity objactivity;
    public GoogleMap myMap = null;
    private FlashDeaOverlay itemizedoverlay;
    private List<GroupDealModle> objgroupdeallist;
    private ArrayList<FlashDeaOverlay> objflashdealoverlay = new ArrayList<FlashDeaOverlay>();
    private Bitmap objbitmap;
    private double lat = 0, lng = 0;
    private Context objcontext;

    public MapViewHelper()
    {
    }
    public MapViewHelper(FragmentActivity objactivity) {
        this.objactivity = objactivity;
    }

    /*
     * @return view of map
     * 
     * @author Sandeep Tiwari
     */
    public View getMapView() {
        View objView = View.inflate(objactivity, R.layout.homemapview, null);
        return objView;
    }

    public GoogleMap InstantiateMapView() {
        if (myMap == null) {
            // Try to obtain the map from the SupportMapFragment.
            myMap = ((SupportMapFragment) this.objactivity
                    .getSupportFragmentManager().findFragmentById(R.id.map))
                    .getMap();
        }
        return myMap;
    }



    public View mOriginalContentView;
    public TouchableWrapper mTouchView;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup parent,
            Bundle savedInstanceState) {
        mOriginalContentView = super.onCreateView(inflater, parent,
                savedInstanceState);
        mTouchView = new TouchableWrapper(getActivity());
        mTouchView.addView(mOriginalContentView);
        return mTouchView;
    }

    @Override
    public View getView() {
        return mOriginalContentView;
    }

    public class TouchableWrapper extends FrameLayout {

        public TouchableWrapper(Context context) {
            super(context);
            objcontext = context;
        }

        @Override
        public boolean dispatchTouchEvent(MotionEvent ev) {
            switch (ev.getAction()) {
            case MotionEvent.ACTION_DOWN:
                ((MainActivity) objcontext).MotionDown(ev);
                break;

            case MotionEvent.ACTION_POINTER_DOWN:
                ((MainActivity) objcontext).MotionPointerDown(ev);
                break;

            case MotionEvent.ACTION_UP:
            case MotionEvent.ACTION_POINTER_UP:
                ((MainActivity) objcontext).MotionUp(ev);
                break;

            case MotionEvent.ACTION_MOVE:
                ((MainActivity) objcontext).ActionMove(ev);
                break;

            }
            return super.dispatchTouchEvent(ev);
        }
    }

    // Map Activity must implement this interface
    public interface UpdateMapAfterUserInterection {
        public void onUpdateMapAfterUserInterection();
    }
}

关于android - 为什么 Touch 在谷歌地图 v2 上不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16161031/

相关文章:

android - 使用 Android 应用更改网络运营商

android - 纵向居中 VideoView

android - 为什么父Activity的菜单在TabHost中不显示?

android - 是否可以在开源项目中使用Google的API?

android - 在 ViewPager 中使用 MapFragment 的最佳方式是什么?

android - Google Maps Android API v2 仅支持 OpenGL ES 2.0 及以上版本的设备

android - Google map v2 淡入效果

javascript - 类型错误 : Cannot destructure property `stat` of 'undefined' or 'null'

java - Android 自定义通知 RemoView 不使用样式

android - map 仅在其 Activity 为 Launcher Activity 时加载