1
0
mirror of https://github.com/bspeice/itcs4180 synced 2024-12-04 13:18:16 -05:00

Add gesture recognition

This commit is contained in:
DjBushido 2014-03-25 17:23:57 -04:00
parent c0723859c7
commit f1ee03a115

View File

@ -15,7 +15,11 @@ import android.app.Activity;
import android.app.ProgressDialog; import android.app.ProgressDialog;
import android.graphics.Bitmap; import android.graphics.Bitmap;
import android.graphics.BitmapFactory; import android.graphics.BitmapFactory;
import android.util.Log;
import android.view.GestureDetector.SimpleOnGestureListener;
import android.view.GestureDetector;
import android.view.Menu; import android.view.Menu;
import android.view.MotionEvent;
import android.view.View; import android.view.View;
import android.widget.ImageView; import android.widget.ImageView;
@ -37,6 +41,23 @@ public class ImageViewerActivity extends Activity {
urls = getResources().getStringArray(urlsId); urls = getResources().getStringArray(urlsId);
currentIndex = extras.getInt("index"); currentIndex = extras.getInt("index");
// Code modified from below, updated to use non-deprecated parts of API
// http://stackoverflow.com/questions/4098198/adding-fling-gesture-to-an-image-view-android
final GestureDetector gdt = new GestureDetector(this, new ImageGestures());
findViewById(R.id.imgViewer).setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View arg0, MotionEvent arg1) {
// To be honest, reading documentation at:
// http://developer.android.com/reference/android/view/GestureDetector.OnGestureListener.html
// http://developer.android.com/reference/android/view/View.OnTouchListener.html
// would lead me to think that we should just return gdt.onTouchEvent(arg1).
// However, as someone pointed out on StackOverflow above, they need to be inverted. Going
// to ask professor about that tonight.
return !gdt.onTouchEvent(arg1);
}
});
displayImage(currentIndex); displayImage(currentIndex);
} }
@ -80,6 +101,7 @@ public class ImageViewerActivity extends Activity {
new ImageDownloader().execute(urls[indexToDisplay]); new ImageDownloader().execute(urls[indexToDisplay]);
dialog = new ProgressDialog(this); dialog = new ProgressDialog(this);
dialog.setCancelable(false); dialog.setCancelable(false);
dialog.setMessage("Loading...");
dialog.show(); dialog.show();
} }
@ -106,5 +128,29 @@ public class ImageViewerActivity extends Activity {
view.setImageBitmap(result); view.setImageBitmap(result);
} }
} }
// Gesture detection from:
// https://developer.android.com/training/gestures/detector.html
// http://stackoverflow.com/questions/4098198/adding-fling-gesture-to-an-image-view-android
// Please note: Gesture recognition code borrowed heavily from StackOverflow. Because there's so
// little actual code, not sure there's any way to re-do this code that won't look like plagiarism.
private static final int SWIPE_MIN_DISTANCE = 120;
private static final int SWIPE_THRESHOLD_VELOCITY = 200;
private class ImageGestures extends SimpleOnGestureListener {
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
if(e1.getX() - e2.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
displayPrev();
return true;
} else if (e2.getX() - e1.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
displayNext();
return true;
}
return false;
}
}
} }