滑动切换Activity(GestureDetector)

本文介绍如何通过手势识别器实现Android应用中Activity之间的滑动切换,并自定义过渡动画提升用户体验。包括创建手势识别器、处理触摸事件及定义不同方向滑动对应的动画资源。


1. 实现手势滑动切换Activity

1. 创建一个手势识别器(GestureDetector)
2. 在Activity的onTouchEvent中去使用该手势识别器
 
```java
public abstract class SetupBaseActivity extends Activity {
protected SharedPreferences sp;
protected GestureDetector mGestureDetector;


@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
sp =getSharedPreferences("config", MODE_PRIVATE);
initView();
setupView();
//1.创建一个手势识别器 new 对象,并给这个手势识别器设置监听器
mGestureDetector = new GestureDetector(new GestureDetector.SimpleOnGestureListener(){
//当手指在屏幕上滑动的时候 调用的方法.
@Override
//e1代表的是手指刚开始滑动的事件,e2代表手指滑动完了的事件
public boolean onFling(MotionEvent e1, MotionEvent e2,float velocityX, float velocityY) {
if(e1.getRawX() - e2.getRawX() > 200){
showNext();//向右滑动,显示下一个界面
return true;
}


if(e2.getRawX() - e1.getRawX() > 200){
showPre();//向左滑动,显示上一个界面
return true;
}
return super.onFling(e1, e2, velocityX, velocityY);
}
});
}


//2.让手势识别器生效,重写Activity的触摸事件,并且将Activity的触摸事件传入到手势识别器中
@Override
public boolean onTouchEvent(MotionEvent event) {
mGestureDetector.onTouchEvent(event);
return super.onTouchEvent(event);
}
}
```


2. 实现切换效果
经过上一步已经实现了滑动界面的切换,但是切换界面时的效果不好看,我们需要自定义切换的效果

1. 在res目录下面新建一个anim文件夹在这个文件夹中新建动画效果
tran_next_in.xml//下一个界面进入的样式        
tran_next_out.xml//下一个界面进入时当前页面出去的样式         
tran_pre_in.xml//上一个界面进入的样式         
tran_pre_out.xml//上一个界面进入时当前页面出去的样式       
 
- tran_next_in.xml里面的内容
```xml
<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android"    //translate是指定整个图片是位移动
android:fromXDelta="100%p" //开始时的X轴位置,100%p当表是当前窗体的宽度
android:toXDelta="0"//结束时候的X轴位置
android:fromYDelta="0"//开始时Y轴的位置
android:toYDelta="0"//结束时Y轴的位置
android:duration="300"//整个动画持续的时间
>
</translate>
```
 
- tran_next_out.xml里面的内容
```xml
<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
android:fromXDelta="0"
android:toXDelta="-100%p"
android:fromYDelta="0"
android:toYDelta="0"
android:duration="300"
>
</translate>
```
 
- tran_pre_in.xml里面的内容
```xml
<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
android:fromXDelta="-100%p"
android:toXDelta="0"
android:fromYDelta="0"
android:toYDelta="0"
android:duration="300"
>
</translate>
```
 
- tran_pre_out.xml里面的内容
```xml
<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
android:fromXDelta="0"
android:toXDelta="100%p"
android:fromYDelta="0"
android:toYDelta="0"
android:duration="300"
>
</translate>
```
  
2. 让Activity在创建和销毁时使用上面自定义的动画
public void overridePendingTransition(int enterAnim, int exitAnim);
Call immediately after one of the flavors of startActivity(Intent) or finish() to specify an explicit transition animation to perform next.
Parameters:
enterAnim - A resource ID of the animation resource to use for the incoming activity. Use 0 for no animation.
exitAnim - A resource ID of the animation resource to use for the outgoing activity. Use 0 for no animation.

```java
public void showNext() {      
Intent intent = new Intent(this, Setup3Activity.class);
startActivity(intent);
finish();
//调用此方法让动画效果生效
overridePendingTransition(R.anim.tran_next_in, R.anim.tran_next_out);
}
    
public void showPre() {
Intent intent = new Intent(this, Setup1Activity.class);
startActivity(intent);
finish();
overridePendingTransition(R.anim.tran_pre_in, R.anim.tran_pre_out);

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值