我正在开发 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/