Добавлено распознавание жестов

This commit is contained in:
Victor 2015-04-10 18:00:29 +03:00
parent 2f1a8cbcfc
commit ee3d5c41c9
2 changed files with 87 additions and 7 deletions

View File

@ -0,0 +1,74 @@
package com.annimon.everlastingsummer;
import android.content.Context;
import android.view.GestureDetector;
import android.view.MotionEvent;
import android.view.View;
/**
* Распознавание жестов.
* @author aNNiMON
*/
public final class TouchGesture implements View.OnTouchListener, GestureDetector.OnGestureListener {
public enum TouchGestureType {
SINGLE_TAP,
SWIPE
}
public static interface OnTouchGestureListener {
void onTouchGesture(TouchGestureType type);
}
private static final int SWIPE_MIN_DISTANCE = 100;
private static final int SWIPE_MIN_VELOCITY = 100;
private final GestureDetector detector;
private final OnTouchGestureListener listener;
public TouchGesture(Context context, OnTouchGestureListener listener) {
detector = new GestureDetector(context, TouchGesture.this);
this.listener = listener;
}
@Override
public boolean onTouch(View v, MotionEvent event) {
detector.onTouchEvent(event);
return true;
}
@Override
public boolean onSingleTapUp(MotionEvent e) {
listener.onTouchGesture(TouchGestureType.SINGLE_TAP);
return true;
}
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
final float distanceX = Math.abs(e1.getX() - e2.getX());
final float distanceY = Math.abs(e1.getY() - e2.getY());
final boolean isNormalDistance = (distanceX > SWIPE_MIN_DISTANCE || distanceY > SWIPE_MIN_DISTANCE);
final boolean isNormalVelocity = (velocityX > SWIPE_MIN_VELOCITY || velocityY > SWIPE_MIN_VELOCITY);
if (isNormalDistance && isNormalVelocity) {
listener.onTouchGesture(TouchGestureType.SWIPE);
return true;
}
return false;
}
@Override
public boolean onDown(MotionEvent e) {
return false;
}
@Override
public void onShowPress(MotionEvent e) { }
@Override
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
return false;
}
@Override
public void onLongPress(MotionEvent e) { }
}

View File

@ -3,6 +3,7 @@ package com.annimon.everlastingsummer;
import java.io.InputStream; import java.io.InputStream;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
import com.annimon.everlastingsummer.TouchGesture.TouchGestureType;
import android.annotation.SuppressLint; import android.annotation.SuppressLint;
import android.app.Activity; import android.app.Activity;
import android.content.Intent; import android.content.Intent;
@ -24,7 +25,7 @@ import android.widget.Toast;
* Экран воспроизведения rpy-сценария. * Экран воспроизведения rpy-сценария.
* @author aNNiMON * @author aNNiMON
*/ */
public final class ViewActivity extends Activity { public final class ViewActivity extends Activity implements TouchGesture.OnTouchGestureListener {
public static final String EXTRA_NAME = "name"; public static final String EXTRA_NAME = "name";
private static final FadeInfo NO_FADE = new FadeInfo(false, false, 0); private static final FadeInfo NO_FADE = new FadeInfo(false, false, 0);
@ -61,12 +62,7 @@ public final class ViewActivity extends Activity {
container = (FrameLayout) findViewById(R.id.container); container = (FrameLayout) findViewById(R.id.container);
textview = (TextView) findViewById(R.id.text); textview = (TextView) findViewById(R.id.text);
background.setOnClickListener(new View.OnClickListener() { background.setOnTouchListener(new TouchGesture(this, this));
@Override
public void onClick(View v) {
Parser.getInstance().next();
}
});
spriteInContainer = new HashMap<String, ImageView>(); spriteInContainer = new HashMap<String, ImageView>();
@ -131,6 +127,16 @@ public final class ViewActivity extends Activity {
super.onPause(); super.onPause();
} }
@Override
public void onTouchGesture(TouchGestureType type) {
switch (type) {
case SINGLE_TAP:
Parser.getInstance().next();
break;
case SWIPE:
break;
}
}
public void windowShow() { public void windowShow() {
if (textview.getVisibility() != View.VISIBLE) if (textview.getVisibility() != View.VISIBLE)