Добавлено распознавание жестов
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.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)
|
||||||
|
Loading…
Reference in New Issue
Block a user