[Android] Seek on left/right gesture
Alexandre Perraud
git at videolan.org
Fri Aug 10 16:42:35 CEST 2012
android | branch: master | Alexandre Perraud <4leyx4ndre at gmail.com> | Fri Aug 10 16:27:09 2012 +0200| [ab1d7aa1fe74a784c783fa956a8ea511973e9326] | committer: Jean-Baptiste Kempf
Seek on left/right gesture
Signed-off-by: Jean-Baptiste Kempf <jb at videolan.org>
> http://git.videolan.org/gitweb.cgi/android.git/?a=commit;h=ab1d7aa1fe74a784c783fa956a8ea511973e9326
---
.../vlc/gui/video/VideoPlayerActivity.java | 72 +++++++++++++-------
1 file changed, 48 insertions(+), 24 deletions(-)
diff --git a/vlc-android/src/org/videolan/vlc/gui/video/VideoPlayerActivity.java b/vlc-android/src/org/videolan/vlc/gui/video/VideoPlayerActivity.java
index 51d5456..be8033c 100644
--- a/vlc-android/src/org/videolan/vlc/gui/video/VideoPlayerActivity.java
+++ b/vlc-android/src/org/videolan/vlc/gui/video/VideoPlayerActivity.java
@@ -59,6 +59,7 @@ import android.os.Handler;
import android.os.Message;
import android.preference.PreferenceManager;
import android.text.format.DateFormat;
+import android.util.DisplayMetrics;
import android.util.Log;
import android.view.Display;
import android.view.MotionEvent;
@@ -145,7 +146,7 @@ public class VideoPlayerActivity extends Activity {
private AudioManager mAudioManager;
private int mAudioMax;
private int mAudioDisplayRange;
- private float mTouchY, mVol;
+ private float mTouchY, mTouchX, mVol;
private boolean mIsAudioChanged;
private String[] mAudioTracks;
private String[] mSubtitleTracks;
@@ -644,36 +645,59 @@ public class VideoPlayerActivity extends Activity {
getWindowManager().getDefaultDisplay().getWidth(),
getWindowManager().getDefaultDisplay().getHeight());
- switch (event.getAction()) {
-
- case MotionEvent.ACTION_DOWN:
- mTouchY = event.getRawY();
- mVol = mAudioManager.getStreamVolume(AudioManager.STREAM_MUSIC);
- mIsAudioChanged = false;
- break;
+ float y_changed = event.getRawY() - mTouchY;
+ float x_changed = event.getRawX() - mTouchX;
- case MotionEvent.ACTION_MOVE:
- float y = event.getRawY();
+ switch (event.getAction()) {
- int delta = (int) (((mTouchY - y) / mAudioDisplayRange) * mAudioMax);
+ case MotionEvent.ACTION_DOWN:
+ // Audio
+ mTouchY = event.getRawY();
+ mVol = mAudioManager.getStreamVolume(AudioManager.STREAM_MUSIC);
+ mIsAudioChanged = false;
+ // Seek
+ mTouchX = event.getRawX();
+ break;
+
+ case MotionEvent.ACTION_MOVE:
+ if (Math.abs(y_changed) > Math.abs(x_changed)) {
+ // Audio
+ int delta = -(int) ((y_changed / mAudioDisplayRange) * mAudioMax);
int vol = (int) Math.min(Math.max(mVol + delta, 0), mAudioMax);
if (delta != 0) {
- mAudioManager.setStreamVolume(AudioManager.STREAM_MUSIC, vol, AudioManager.FLAG_SHOW_UI);
+ mAudioManager.setStreamVolume(AudioManager.STREAM_MUSIC,
+ vol, AudioManager.FLAG_SHOW_UI);
mIsAudioChanged = true;
}
- break;
-
- case MotionEvent.ACTION_UP:
- if (!mIsAudioChanged) {
- if (!mShowing) {
- showOverlay();
- } else {
- hideOverlay(true);
- if(Util.isICSOrLater())
- mHandler.sendMessageDelayed(mHandler.obtainMessage(HIDE_NAV), OVERLAY_TIMEOUT);
- }
+ }
+ break;
+
+ case MotionEvent.ACTION_UP:
+ // Audio
+ if (!mIsAudioChanged) {
+ if (!mShowing) {
+ showOverlay();
+ } else {
+ hideOverlay(true);
+ if (Util.isICSOrLater())
+ mHandler.sendMessageDelayed(
+ mHandler.obtainMessage(HIDE_NAV),
+ OVERLAY_TIMEOUT);
}
- break;
+ }
+ // Seek
+ if (Math.abs(y_changed) < Math.abs(x_changed)) {
+ // Tools to get the screen size for the cubic progression
+ DisplayMetrics screen = new DisplayMetrics();
+ getWindowManager().getDefaultDisplay().getMetrics(screen);
+
+ // Size of the jump, 10 minutes max (600000) with a cubic
+ // progression
+ int jump = (int) (600000 * Math.pow(
+ (x_changed / screen.widthPixels), 3));
+ mPlayerControlListener.onSeek(jump);
+ }
+ break;
}
return mIsAudioChanged;
}
More information about the Android
mailing list