GestureDetector手势识别器之onFling的应用

在看了启舰博主的博客之后,发现手势识别器中的实现的onFling是个非常好玩的应用,可以实现屏幕的左右滑动:
简单代码如下:
1,因为左右滑动屏幕较多,特写一个基类

public abstract class BaseSetupActivity extends Activity {
    private GestureDetector mDetector;//手势识别器

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        mDetector=new GestureDetector(this, new GestureDetector.SimpleOnGestureListener(){
            //手指在屏幕上面滑翔事件的回调
            // @params1 手指第一次放到屏幕上的事件
            // @params2 手指离开屏幕上的事件
            // @params3 velocityX X轴的一个分量
            @Override
            public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
                 if(e1.getRawX()-e2.getRawX()<100) {
                     showPre();
                     overridePendingTransition(R.anim.translate_pre_in,R.anim.translate_pre_out);
                     return true;
                 }
                if(e2.getRawX()-e1.getRawX()<100) {
                    showNext();
                    overridePendingTransition(R.anim.translate_next_in,R.anim.translate_next_out);
                    return  true;
                }
                return super.onFling(e1, e2, velocityX, velocityY);
            }
        });
        initView();
        initData();
        initEvent();
    }

    protected abstract void initEvent();


    //数据初始化
    protected abstract void initData();

    //手指只要触摸到屏幕,这个事件就会被激活
    @Override
    public boolean onTouchEvent(MotionEvent event) {
        mDetector.onTouchEvent(event);
        return super.onTouchEvent(event);
    }

    protected abstract void initView();

    //这是一个抽象方法,在父类里面只需要声明,子类具体实现
    public abstract void showNext();
    public  abstract  void showPre();  
}

2,子类实现代码如下:

public class Setup2Activity  extends  BaseSetupActivity{

    @Override
    protected void initEvent() {
      //TODO
    }

    @Override
    protected void initData() {
       //TODO
    }

    @Override
    protected void initView() {
    //TODO
    }

    @Override
    public void showNext() {
        Intent intent=new Intent(this,Setup3Activity.class);
        startActivity(intent);
    }

    @Override
    public void showPre() {
        Intent intent=new Intent(this,Setup1Activity.class);
        startActivity(intent);
    }
}

3,overridePendingTransition(),所填充的二个参数动画示意代码如下:

向右滑时,滑进的动画:


<translate xmlns:android="http://schemas.android.com/apk/res/android"
           android:duration="300"
           android:fromXDelta="100%"
           android:fromYDelta="0"
           android:toXDelta="0"
           android:toYDelta="0" >
translate>

向右滑,滑出的动画:


<translate xmlns:android="http://schemas.android.com/apk/res/android"
           android:duration="300"
           android:fromXDelta="0"
           android:fromYDelta="0"
           android:toXDelta="-100%p"
           android:toYDelta="0">
translate>

向左滑,滑进的动画:


<translate xmlns:android="http://schemas.android.com/apk/res/android"
           android:duration="300"
           android:fromXDelta="-100%p"
           android:fromYDelta="0"
           android:toXDelta="0"
           android:toYDelta="0">
translate>

向左滑,滑出的动画:


<translate xmlns:android="http://schemas.android.com/apk/res/android"
           android:duration="300"
           android:fromXDelta="0"
           android:fromYDelta="0"
           android:toXDelta="100%p"
           android:toYDelta="0">
translate>

以后就完成了,滑动的步骤
但须解释下:overridePendingTransition的应用:
1,Activity的动画切换,指的是从一个activity跳转到另外一个activity的动画,要实现其跳转就必须实现其overridePendingTransition()函数
2,overridePendingTransition()函数的二个参数指的是:退出时消失的动画和进入时所呈现的动画
3,其使用必需紧挨着startActivity()或者finish()函数之后调用
4,在ActivityGroup等的嵌入式Activity中时,需使用this.getParent().overridePendingTransition()函数

你可能感兴趣的:(Android)