【发布时间】:2014-07-21 22:13:21
【问题描述】:
我正在尝试在我的 MapView 中实现双击缩放功能。该事件总是第一次触发,但以后不会触发。下面是我的代码。我感觉这与第一次触发事件后地图控制器丢失有关。
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import com.google.android.maps.MapActivity;
import com.google.android.maps.MapController;
import com.google.android.maps.MapView;
public class mainmap extends MapActivity implements OnTouchListener{
long lasttime = -1;
MapController mapc;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
MapView mapView = (MapView) findViewById(R.id.mapview);
mapView.setBuiltInZoomControls(true);
mapc = mapView.getController();
mapView.setOnTouchListener(this);
}
@Override
protected boolean isRouteDisplayed() {
// TODO Auto-generated method stub
return false;
}
@Override
public boolean onTouch(View v, MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_DOWN){
if(event.getEventTime()-lasttime<2000){
mapc.zoomInFixing((int)event.getX(),(int)event.getY());
}
}
lasttime=event.getEventTime();
return true;
}
}
我还尝试编辑 OnTouch 方法以将传入的 View 转换为 MapView,在触发事件时获取控制器。但是,在第一个事件被触发但不是后续事件的情况下,我得到了相同的结果。
public boolean onTouch(View v, MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_DOWN){
if(event.getEventTime()-lasttime<2000){
((MapView)v).getController().zoomInFixing((int)event.getX(), (int)event.getY());
}
}
lasttime=event.getEventTime();
return true;
}
尽可能简单,我删掉了 OnTouch 方法中的所有代码,并将其编程为简单地显示一条小的 toast 消息。
public boolean onTouch(View v, MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_DOWN){
Toast.makeText(this,"Down!",Toast.LENGTH_SHORT).show();
}
return true;
}
这按预期工作,每次触摸 MapView 时都会显示 Toast。
我不明白为什么在这种情况下事件会正确触发,但在我之前的实现中却不会。
【问题讨论】:
标签: android event-handling android-mapview ontouchlistener