Tôi đang cố gắng triển khai chức năng phóng to thu nhỏ bằng hai lần nhấn trong MapView của mình. Sự kiện này luôn cháy lần đầu tiên, nhưng không bao giờ lần sau. Dưới đây là mã của tôi. Tôi có cảm giác nó có liên quan đến bộ điều khiển bản đồ bị mất sau lần đầu tiên sự kiện được kích hoạt.OnTouch trong MapView chỉ kích hoạt lần đầu tiên
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;
}
}
Tôi cũng đã thử chỉnh sửa phương pháp OnTouch để truyền Chế độ xem đến vào MapView, nhận bộ điều khiển trong khi sự kiện được kích hoạt. Tuy nhiên, tôi nhận được kết quả tương tự khi sự kiện đầu tiên được kích hoạt nhưng không phải là sự kiện tiếp theo.
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;
}
Làm càng cơ bản càng tốt, tôi cắt bỏ tất cả mã trong phương pháp OnTouch và lập trình để chỉ hiển thị thông báo bánh mì nướng nhỏ.
public boolean onTouch(View v, MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_DOWN){
Toast.makeText(this,"Down!",Toast.LENGTH_SHORT).show();
}
return true;
}
Điều này hoạt động như mong đợi, hiển thị Bánh mì nướng mỗi lần chạm MapView.
Tôi không hiểu tại sao sự kiện sẽ kích hoạt đúng trong trường hợp này nhưng không phải trong lần triển khai trước đó của tôi.
Cảm ơn đề xuất của bạn. Tôi sẽ cố gắng triển khai OnDoubleTapListener để xử lý chức năng này thay thế. Tôi vẫn còn bối rối. Tôi hiểu OnDoubleTapListener có lẽ là cách tốt nhất để xử lý việc này, nhưng mã tôi đăng trong lý thuyết phải hoạt động, đúng không? – amandion