Возможно, вам придется объединить несколько методов для достижения того, что вы хотите.
Чтобы поймать панорамирование, я бы попробовал переопределить ваши MapViews onTouchEvent () или, возможно, dispatchTouchEvent (), и прослушать MotionEvent.Событие ACTION_UP.Это срабатывает, когда пользователь убирает палец с экрана:
public boolean onTouchEvent(MotionEvent event) {
if (event.getAction()==MotionEvent.ACTION_UP) {
// Call your procedure here
}
return super.onTouchEvent(ev);
}
Если вы хотите вызвать вашу процедуру во время панорамирования, я думаю, вам придется искать движение панорамирования, перекрывающее одно из двухте же методы.Примерно так:
public boolean onTouchEvent(MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_MOVE) {
if (event.getHistorySize() < 1)
return; // First call, no history
// Get difference in position since previous move event
float diffX = event.getX() - event.getHistoricalX(event.getHistorySize() - 1);
float diffY = event.getY() - event.getHistoricalY(event.getHistorySize() - 1);
if (Math.abs(diffX) > 0.5f || Math.abs(diffY) > 0.5f) {
/* Position has changed substantially, so this is probably a drag action.
Call your procedure here. */
}
}
}
Чтобы обнаружить изменение уровня масштабирования, вы можете переопределить dispatchDraw:
int oldZoomLevel=-1;
public void dispatchDraw(Canvas canvas) {
super.dispatchDraw(canvas);
if (getZoomLevel() != oldZoomLevel) {
// Call your procedure here
oldZoomLevel = getZoomLevel();
}
}