Добавлено распознавание жестов
This commit is contained in:
parent
2f1a8cbcfc
commit
ee3d5c41c9
74
src/com/annimon/everlastingsummer/TouchGesture.java
Normal file
74
src/com/annimon/everlastingsummer/TouchGesture.java
Normal 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) { }
|
||||
}
|
@ -3,6 +3,7 @@ package com.annimon.everlastingsummer;
|
||||
import java.io.InputStream;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import com.annimon.everlastingsummer.TouchGesture.TouchGestureType;
|
||||
import android.annotation.SuppressLint;
|
||||
import android.app.Activity;
|
||||
import android.content.Intent;
|
||||
@ -24,7 +25,7 @@ import android.widget.Toast;
|
||||
* Экран воспроизведения rpy-сценария.
|
||||
* @author aNNiMON
|
||||
*/
|
||||
public final class ViewActivity extends Activity {
|
||||
public final class ViewActivity extends Activity implements TouchGesture.OnTouchGestureListener {
|
||||
|
||||
public static final String EXTRA_NAME = "name";
|
||||
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);
|
||||
textview = (TextView) findViewById(R.id.text);
|
||||
|
||||
background.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
Parser.getInstance().next();
|
||||
}
|
||||
});
|
||||
background.setOnTouchListener(new TouchGesture(this, this));
|
||||
|
||||
spriteInContainer = new HashMap<String, ImageView>();
|
||||
|
||||
@ -131,6 +127,16 @@ public final class ViewActivity extends Activity {
|
||||
super.onPause();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTouchGesture(TouchGestureType type) {
|
||||
switch (type) {
|
||||
case SINGLE_TAP:
|
||||
Parser.getInstance().next();
|
||||
break;
|
||||
case SWIPE:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
public void windowShow() {
|
||||
if (textview.getVisibility() != View.VISIBLE)
|
||||
|
Loading…
Reference in New Issue
Block a user