ama*_*ion 6 android event-handling ontouchlistener android-mapview
我正在尝试在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;
}
}
Run Code Online (Sandbox Code Playgroud)
我还尝试编辑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;
}
Run Code Online (Sandbox Code Playgroud)
尽可能基本,我删除了OnTouch方法中的所有代码,并将其编程为简单地显示小吐司消息.
public boolean onTouch(View v, MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_DOWN){
Toast.makeText(this,"Down!",Toast.LENGTH_SHORT).show();
}
return true;
}
Run Code Online (Sandbox Code Playgroud)
这可以按预期工作,每次触摸MapView时都会显示Toast.
我不明白为什么在这种情况下事件会正常启动,但在我之前的实现中却没有.
Nir*_*tel 13
如果您使用此方法,"mapView.setBuiltInZoomControls(true);"那么您touch的工作正在进行中.
请删除该行并检查我确定它会起作用..
在某些情况下,如果您想要BuiltInZoomControls,那么您可以使用Overlay的OnTouch方法,如下所示.
public class MapOverlay extends Overlay {
public MapOverlay(Context ctx) {super(ctx);}
@Override
protected void draw(Canvas c, MapView osmv, boolean shadow) { }
@Override
public boolean onTouchEvent(MotionEvent e, MapView mapView) {
//Write yout touch code here..
return false;
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7662 次 |
| 最近记录: |