我现在想实现播放video时,左右滑屏实现上一个,下一个文件的切换,并且在切换过程中加入动画,请大侠们指教下啊感激

解决方案 »

  1.   

    package com.hilda.MusicViewFlipper;import android.app.Activity;
    import android.content.Context;
    import android.os.Bundle;
    import android.util.Log;
    import android.view.GestureDetector;
    import android.view.GestureDetector.OnGestureListener;
    import android.view.GestureDetector.SimpleOnGestureListener;
    import android.view.MotionEvent;
    import android.view.View;
    import android.view.View.OnTouchListener;
    import android.view.ViewGroup.LayoutParams;
    import android.widget.TextView;
    import android.widget.ViewFlipper;public class MusicViewFlipperActivity extends Activity{
        /** Called when the activity is first created. */
    private GestureDetector detector;
    private ViewFlipper flipper;
    private int n=0;

        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
            
            flipper=(ViewFlipper)this.findViewById(R.id.viewflipper);
            flipper.addView(addTextViewByText(2),new LayoutParams(LayoutParams.FILL_PARENT,LayoutParams.WRAP_CONTENT));
            //flipper.startFlipping();
            flipper.setLongClickable(true);
            flipper.setOnTouchListener(new myTouchListener());
            detector=new GestureDetector(new myGestureListener());
            
        } private View addTextViewByText(int r) {
    // TODO Auto-generated method stub
    if(r==0)++n;
    else if(r==1)--n;
    Log.i("flipper", "this is n: "+n);
    String txt="This is the "+n+" text.";
    TextView t=new TextView(this);
    t.setTextSize(20);
    t.setText(txt);
    t.setGravity(1);
    return t;
    }
    class myTouchListener implements OnTouchListener{ @Override
    public boolean onTouch(View v, MotionEvent event) {
    // TODO Auto-generated method stub
    return detector.onTouchEvent(event);
    }

    }
    class myGestureListener extends GestureDetector.SimpleOnGestureListener{ @Override
    public boolean onDoubleTapEvent(MotionEvent e) {
    // TODO Auto-generated method stub
    return super.onDoubleTapEvent(e);
    //return true;
    } @Override
    public void onLongPress(MotionEvent e) {
    // TODO Auto-generated method stub
    super.onLongPress(e);
    } @Override
    public void onShowPress(MotionEvent e) {
    // TODO Auto-generated method stub
    super.onShowPress(e);
    } @Override
    public boolean onSingleTapConfirmed(MotionEvent e) {
    // TODO Auto-generated method stub
    return super.onSingleTapConfirmed(e);
    //return true;
    } @Override
    public boolean onSingleTapUp(MotionEvent e) {
    // TODO Auto-generated method stub
    return super.onSingleTapUp(e);
    //return true;
    } @Override
    public boolean onScroll(MotionEvent e1, MotionEvent e2,
    float distanceX, float distanceY) {
    // TODO Auto-generated method stub
    return super.onScroll(e1, e2, distanceX, distanceY);
    } @Override
    public boolean onDoubleTap(MotionEvent e) {
    // TODO Auto-generated method stub
    return super.onDoubleTap(e);
    } @Override
    public boolean onDown(MotionEvent e) {
    // TODO Auto-generated method stub
    //return super.onDown(e);
    return true;
    } @Override
    public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
    float velocityY) {
    // TODO Auto-generated method stub
    Log.i("Fling", "Flinging.");
    if(e1.getX()-e2.getX()>120){
    flipper.setInAnimation(getApplicationContext(),R.anim.push_left_in);
    flipper.setOutAnimation(getApplicationContext(),R.anim.push_left_out);
    flipper.addView(addTextViewByText(0),new LayoutParams(LayoutParams.FILL_PARENT,LayoutParams.WRAP_CONTENT));
    flipper.showNext();
    return true;
    }
    else if(e1.getX()-e2.getX()<-120){
    flipper.setInAnimation(getApplicationContext(),R.anim.push_right_in);
    flipper.setOutAnimation(getApplicationContext(),R.anim.push_right_out);
    flipper.addView(addTextViewByText(1),new LayoutParams(LayoutParams.FILL_PARENT,LayoutParams.WRAP_CONTENT));
    flipper.showPrevious();
    return true;
    }
    return super.onFling(e1, e2, velocityX, velocityY);
    //return true;
    }

    }
    /
    }上面这段代码可以实现你说的滑动效果,你只要把里面的textview改成videoview就可以了,还可以每个videoview做一个handle,这样就可以控制其播放了。如果还有什么问题可以留言给我。
      

  2.   

    楼上的代码只是一个例子。关键是重写 GestureDetector的
    public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY)
    函数。判断是否有左右滑动的动作,并根据动作做相应的操作。
      

  3.   

    雪雪,首先非常感谢你,我前面擦应了两个view,两次动画,实现了类似功能,现在想把效果做的更炫,我在onfling的时候启动了一个gallery,把当前video的截图和上下两个video初始的截图,实现滑动效果,但是启动gallery以后,经常会有滑不动的效果,请赐教。。
      

  4.   


    我猜测是因为你的GestureDetector, 把对gallery做的 gesture , 消耗掉了。
    对gallery的滑动应该交给系统去处理,但是你的GestureDetector 先捕获到了这个动作,然后对这个gesture进行的操作。而没有返回给系统,让android去处理这个gesture @Override
            public boolean onDown(MotionEvent e) {
                // TODO Auto-generated method stub
                //return super.onDown(e);
                return true;
            }这个函数不能一直返回true ,如果检查到gallery 出现了,就应该返回false, 让android 去处理这个MotionEvent