android中带手势(滑动功能)的视频视图

android中带手势(滑动功能)的视频视图,android,gesture,audio-player,android-music-player,Android,Gesture,Audio Player,Android Music Player,我想将默认的视频视图和手势侦听器结合起来 我想在VideoView上实现同样的功能,如果用户向左滑动歌曲播放向后,或者向右滑动歌曲播放向前 通过以下代码打开默认媒体播放器: Intent intent = new Intent("android.intent.action.MUSIC_PLAYER"); startActivity(intent); 那么如何添加手势监听器…?我了解了如何将VideoView和手势监听器结合起来: 布局文件活动\u main.xml: <Linea

我想将默认的视频视图手势侦听器结合起来

我想在VideoView上实现同样的功能,如果用户向左滑动歌曲播放向后,或者向右滑动歌曲播放向前

通过以下代码打开默认媒体播放器:

Intent intent = new Intent("android.intent.action.MUSIC_PLAYER");
    startActivity(intent);

那么如何添加手势监听器…?

我了解了如何将VideoView和手势监听器结合起来:

布局文件活动\u main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >

   <VideoView
    android:id="@+id/videoView"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />

</LinearLayout>
GestureDetection.java类:

public class GestureDetection extends SimpleOnGestureListener {

public final static int SWIPE_UP = 1;
public final static int SWIPE_DOWN = 2;
public final static int SWIPE_LEFT = 3;
public final static int SWIPE_RIGHT = 4;

public final static int MODE_SOLID = 1;
public final static int MODE_DYNAMIC = 2;

private final static int ACTION_FAKE = -13; // just an unlikely number
private int swipe_Min_Distance = 50;
private int swipe_Max_Distance = 350;
private int swipe_Min_Velocity = 100;

private int mode = MODE_DYNAMIC;
private boolean running = true;
private boolean tapIndicator = false;

private Activity context;

private GestureDetector detector;
private SimpleGestureListener listener;

public GestureDetection(Activity context, SimpleGestureListener sgl) {

    this.context = context;
    this.detector = new GestureDetector(context, this);
    this.listener = sgl;
}

public void onTouchEvent(MotionEvent event) {

    if (!this.running)
        return;

    boolean result = this.detector.onTouchEvent(event);

    if (this.mode == MODE_SOLID)
        event.setAction(MotionEvent.ACTION_CANCEL);
    else if (this.mode == MODE_DYNAMIC) {

        if (event.getAction() == ACTION_FAKE)
            event.setAction(MotionEvent.ACTION_UP);
        else if (result)
            event.setAction(MotionEvent.ACTION_CANCEL);
        else if (this.tapIndicator) {
            event.setAction(MotionEvent.ACTION_DOWN);
            this.tapIndicator = false;
        }

    }
    // else just do nothing, it's Transparent
}

@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
        float velocityY) {

    final float xDistance = Math.abs(e1.getX() - e2.getX());
    final float yDistance = Math.abs(e1.getY() - e2.getY());

    if (xDistance > this.swipe_Max_Distance
            || yDistance > this.swipe_Max_Distance)
        return false;

    velocityX = Math.abs(velocityX);
    velocityY = Math.abs(velocityY);
    boolean result = false;

    if (velocityX > this.swipe_Min_Velocity
            && xDistance > this.swipe_Min_Distance) {
        if (e1.getX() > e2.getX()) // right to left
            this.listener.onSwipe(SWIPE_RIGHT);
        else
            this.listener.onSwipe(SWIPE_LEFT);

        result = true;
    } else if (velocityY > this.swipe_Min_Velocity
            && yDistance > this.swipe_Min_Distance) {
        if (e1.getY() > e2.getY()) // bottom to up
            this.listener.onSwipe(SWIPE_UP);
        else
            this.listener.onSwipe(SWIPE_DOWN);

        result = true;
    }

    return result;
}

@Override
public boolean onSingleTapConfirmed(MotionEvent arg) {

    if (this.mode == MODE_DYNAMIC) {
        arg.setAction(ACTION_FAKE);

        this.context.dispatchTouchEvent(arg);
    }

    return false;
}

static interface SimpleGestureListener {
    void onSwipe(int direction);

}

}

我知道了如何结合视频视图和手势监听器:

布局文件活动\u main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >

   <VideoView
    android:id="@+id/videoView"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />

</LinearLayout>
GestureDetection.java类:

public class GestureDetection extends SimpleOnGestureListener {

public final static int SWIPE_UP = 1;
public final static int SWIPE_DOWN = 2;
public final static int SWIPE_LEFT = 3;
public final static int SWIPE_RIGHT = 4;

public final static int MODE_SOLID = 1;
public final static int MODE_DYNAMIC = 2;

private final static int ACTION_FAKE = -13; // just an unlikely number
private int swipe_Min_Distance = 50;
private int swipe_Max_Distance = 350;
private int swipe_Min_Velocity = 100;

private int mode = MODE_DYNAMIC;
private boolean running = true;
private boolean tapIndicator = false;

private Activity context;

private GestureDetector detector;
private SimpleGestureListener listener;

public GestureDetection(Activity context, SimpleGestureListener sgl) {

    this.context = context;
    this.detector = new GestureDetector(context, this);
    this.listener = sgl;
}

public void onTouchEvent(MotionEvent event) {

    if (!this.running)
        return;

    boolean result = this.detector.onTouchEvent(event);

    if (this.mode == MODE_SOLID)
        event.setAction(MotionEvent.ACTION_CANCEL);
    else if (this.mode == MODE_DYNAMIC) {

        if (event.getAction() == ACTION_FAKE)
            event.setAction(MotionEvent.ACTION_UP);
        else if (result)
            event.setAction(MotionEvent.ACTION_CANCEL);
        else if (this.tapIndicator) {
            event.setAction(MotionEvent.ACTION_DOWN);
            this.tapIndicator = false;
        }

    }
    // else just do nothing, it's Transparent
}

@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
        float velocityY) {

    final float xDistance = Math.abs(e1.getX() - e2.getX());
    final float yDistance = Math.abs(e1.getY() - e2.getY());

    if (xDistance > this.swipe_Max_Distance
            || yDistance > this.swipe_Max_Distance)
        return false;

    velocityX = Math.abs(velocityX);
    velocityY = Math.abs(velocityY);
    boolean result = false;

    if (velocityX > this.swipe_Min_Velocity
            && xDistance > this.swipe_Min_Distance) {
        if (e1.getX() > e2.getX()) // right to left
            this.listener.onSwipe(SWIPE_RIGHT);
        else
            this.listener.onSwipe(SWIPE_LEFT);

        result = true;
    } else if (velocityY > this.swipe_Min_Velocity
            && yDistance > this.swipe_Min_Distance) {
        if (e1.getY() > e2.getY()) // bottom to up
            this.listener.onSwipe(SWIPE_UP);
        else
            this.listener.onSwipe(SWIPE_DOWN);

        result = true;
    }

    return result;
}

@Override
public boolean onSingleTapConfirmed(MotionEvent arg) {

    if (this.mode == MODE_DYNAMIC) {
        arg.setAction(ACTION_FAKE);

        this.context.dispatchTouchEvent(arg);
    }

    return false;
}

static interface SimpleGestureListener {
    void onSwipe(int direction);

}

}