Adds double tap to zoom
This commit is contained in:
parent
804c91c701
commit
469ca9093f
@ -12,6 +12,7 @@ import org.oscim.map.ViewController;
|
|||||||
|
|
||||||
import static org.fest.assertions.api.Assertions.assertThat;
|
import static org.fest.assertions.api.Assertions.assertThat;
|
||||||
import static org.mockito.Matchers.any;
|
import static org.mockito.Matchers.any;
|
||||||
|
import static org.mockito.Mockito.never;
|
||||||
import static org.mockito.Mockito.verify;
|
import static org.mockito.Mockito.verify;
|
||||||
import static org.mockito.Mockito.when;
|
import static org.mockito.Mockito.when;
|
||||||
|
|
||||||
@ -39,22 +40,58 @@ public class MapEventLayerTest {
|
|||||||
assertThat(layer).isNotNull();
|
assertThat(layer).isNotNull();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void doubleTap_shouldAnimateZoom() throws Exception {
|
||||||
|
simulateDoubleTap();
|
||||||
|
verify(mockAnimator).animateZoom(300, 2, 0, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void doubleTap_shouldAnimateZoomAfterDoubleTouchDrag() throws Exception {
|
||||||
|
simulateDoubleTouchDragUp();
|
||||||
|
simulateDoubleTap();
|
||||||
|
verify(mockAnimator).animateZoom(300, 2, 0, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void doubleTouchDrag_shouldNotAnimateZoom() throws Exception {
|
||||||
|
simulateDoubleTouchDragUp();
|
||||||
|
verify(mockAnimator, never()).animateZoom(any(long.class), any(double.class),
|
||||||
|
any(float.class), any(float.class));
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void doubleTouchDragUp_shouldDecreaseContentScale() throws Exception {
|
public void doubleTouchDragUp_shouldDecreaseContentScale() throws Exception {
|
||||||
layer.onTouchEvent(new TestMotionEvent(MotionEvent.ACTION_DOWN, 1, 1));
|
simulateDoubleTouchDragUp();
|
||||||
layer.onGesture(Gesture.DOUBLE_TAP, new TestMotionEvent(MotionEvent.ACTION_MOVE, 1, 0));
|
|
||||||
layer.onTouchEvent(new TestMotionEvent(MotionEvent.ACTION_MOVE, 1, 0));
|
|
||||||
verify(mockViewport).scaleMap(argumentCaptor.capture(), any(float.class), any(float.class));
|
verify(mockViewport).scaleMap(argumentCaptor.capture(), any(float.class), any(float.class));
|
||||||
assertThat(argumentCaptor.getValue()).isLessThan(1);
|
assertThat(argumentCaptor.getValue()).isLessThan(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void doubleTouchDragDown_shouldIncreaseContentScale() throws Exception {
|
public void doubleTouchDragDown_shouldIncreaseContentScale() throws Exception {
|
||||||
|
simulateDoubleTouchDragDown();
|
||||||
|
verify(mockViewport).scaleMap(argumentCaptor.capture(), any(float.class), any(float.class));
|
||||||
|
assertThat(argumentCaptor.getValue()).isGreaterThan(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void simulateDoubleTap() {
|
||||||
|
layer.onTouchEvent(new TestMotionEvent(MotionEvent.ACTION_DOWN, 1, 1));
|
||||||
|
layer.onGesture(Gesture.DOUBLE_TAP, new TestMotionEvent(MotionEvent.ACTION_UP, 1, 1));
|
||||||
|
layer.onTouchEvent(new TestMotionEvent(MotionEvent.ACTION_UP, 1, 1));
|
||||||
|
}
|
||||||
|
|
||||||
|
private void simulateDoubleTouchDragUp() {
|
||||||
|
layer.onTouchEvent(new TestMotionEvent(MotionEvent.ACTION_DOWN, 1, 1));
|
||||||
|
layer.onGesture(Gesture.DOUBLE_TAP, new TestMotionEvent(MotionEvent.ACTION_MOVE, 1, 0));
|
||||||
|
layer.onTouchEvent(new TestMotionEvent(MotionEvent.ACTION_MOVE, 1, 0));
|
||||||
|
layer.onTouchEvent(new TestMotionEvent(MotionEvent.ACTION_UP, 1, 0));
|
||||||
|
}
|
||||||
|
|
||||||
|
private void simulateDoubleTouchDragDown() {
|
||||||
layer.onTouchEvent(new TestMotionEvent(MotionEvent.ACTION_DOWN, 1, 1));
|
layer.onTouchEvent(new TestMotionEvent(MotionEvent.ACTION_DOWN, 1, 1));
|
||||||
layer.onGesture(Gesture.DOUBLE_TAP, new TestMotionEvent(MotionEvent.ACTION_MOVE, 1, 2));
|
layer.onGesture(Gesture.DOUBLE_TAP, new TestMotionEvent(MotionEvent.ACTION_MOVE, 1, 2));
|
||||||
layer.onTouchEvent(new TestMotionEvent(MotionEvent.ACTION_MOVE, 1, 2));
|
layer.onTouchEvent(new TestMotionEvent(MotionEvent.ACTION_MOVE, 1, 2));
|
||||||
verify(mockViewport).scaleMap(argumentCaptor.capture(), any(float.class), any(float.class));
|
layer.onTouchEvent(new TestMotionEvent(MotionEvent.ACTION_UP, 1, 2));
|
||||||
assertThat(argumentCaptor.getValue()).isGreaterThan(1);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
class TestMotionEvent extends MotionEvent {
|
class TestMotionEvent extends MotionEvent {
|
||||||
|
@ -54,6 +54,7 @@ public class MapEventLayer extends Layer implements InputListener, GestureListen
|
|||||||
|
|
||||||
private boolean mDown;
|
private boolean mDown;
|
||||||
private boolean mDoubleTap;
|
private boolean mDoubleTap;
|
||||||
|
private boolean mDrag;
|
||||||
|
|
||||||
private float mPrevX1;
|
private float mPrevX1;
|
||||||
private float mPrevY1;
|
private float mPrevY1;
|
||||||
@ -136,6 +137,12 @@ public class MapEventLayer extends Layer implements InputListener, GestureListen
|
|||||||
}
|
}
|
||||||
if (action == MotionEvent.ACTION_UP) {
|
if (action == MotionEvent.ACTION_UP) {
|
||||||
mDown = false;
|
mDown = false;
|
||||||
|
if (mDoubleTap && !mDrag) {
|
||||||
|
mMap.animator().animateZoom(300, 2, 0, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
mDrag = false;
|
||||||
|
|
||||||
if (mStartMove < 0)
|
if (mStartMove < 0)
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
@ -200,6 +207,7 @@ public class MapEventLayer extends Layer implements InputListener, GestureListen
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
// FIXME limit scale properly
|
// FIXME limit scale properly
|
||||||
|
mDrag = true;
|
||||||
mViewport.scaleMap(1 + my / (height / 6), 0, 0);
|
mViewport.scaleMap(1 + my / (height / 6), 0, 0);
|
||||||
mMap.updateMap(true);
|
mMap.updateMap(true);
|
||||||
mStartMove = -1;
|
mStartMove = -1;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user