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(),所填充的二个参数动画示意代码如下:

向右滑时,滑进的动画:
<?xml version="1.0" encoding="utf-8"?>

<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>

向右滑,滑出的动画:
<?xml version="1.0" encoding="utf-8"?>

<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>

向左滑,滑进的动画:
<?xml version="1.0" encoding="utf-8"?>

<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>

向左滑,滑出的动画:
<?xml version="1.0" encoding="utf-8"?>

<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()函数

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值