From ee3d5c41c9af6ff71b1e7804792338e6118d48c2 Mon Sep 17 00:00:00 2001 From: Victor Date: Fri, 10 Apr 2015 18:00:29 +0300 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D0=BE=20=D1=80=D0=B0=D1=81=D0=BF=D0=BE=D0=B7=D0=BD=D0=B0?= =?UTF-8?q?=D0=B2=D0=B0=D0=BD=D0=B8=D0=B5=20=D0=B6=D0=B5=D1=81=D1=82=D0=BE?= =?UTF-8?q?=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../everlastingsummer/TouchGesture.java | 74 +++++++++++++++++++ .../everlastingsummer/ViewActivity.java | 20 +++-- 2 files changed, 87 insertions(+), 7 deletions(-) create mode 100644 src/com/annimon/everlastingsummer/TouchGesture.java diff --git a/src/com/annimon/everlastingsummer/TouchGesture.java b/src/com/annimon/everlastingsummer/TouchGesture.java new file mode 100644 index 0000000..8c5c6e6 --- /dev/null +++ b/src/com/annimon/everlastingsummer/TouchGesture.java @@ -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) { } +} diff --git a/src/com/annimon/everlastingsummer/ViewActivity.java b/src/com/annimon/everlastingsummer/ViewActivity.java index a901c7a..5e96a6e 100644 --- a/src/com/annimon/everlastingsummer/ViewActivity.java +++ b/src/com/annimon/everlastingsummer/ViewActivity.java @@ -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(); @@ -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)