手势滑动和点击事件有一些不一样,可以先创建GestureDetector mDector手势识别器,再通过对onTouchEvent的监听,进行处理手势的动作,根据相对于屏幕坐标的移动判断移动到上一页还是下一页。Setup2Activity.java
package com.ldw.safe.Activity;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.GestureDetector;
import android.view.GestureDetector.SimpleOnGestureListener;
import android.view.MotionEvent;
import android.view.View;
import com.ldw.safe.R;
/*
* 手机防盗第二个设置向导页面
*/
public class Setup2Activity extends Activity {
private GestureDetector mDector;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_setup2);
//创建手势识别器
mDector = new GestureDetector(this, new SimpleOnGestureListener(){
//监听手势滑动动作,e1是滑动的起始点,e2是滑动的终点。后2个参数是X,Y速度
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY){
//获取到相对于屏幕的相对坐标,设置最小的滑动距离
//向右滑动,上一页
if((e2.getRawX() - e1.getRawX()) > 200){
showPrevious();
return true;
}
//向左滑动,下一页
if((e1.getRawX() - e2.getRawX()) > 200){
showNext();
return true;
}
return super.onFling(e1, e2, velocityX, velocityY);
}
});
}
//显示上一页
public void showPrevious(){
//页面跳转
startActivity(new Intent(Setup2Activity.this, Setup1Activity.class));
//销毁当前页面
finish();
//两个界面的切换动画
overridePendingTransition(R.anim.tran_previous_in, R.anim.tran_previous_out);//进入动画和推出动画
}
//显示下一页
public void showNext(){
//页面跳转
startActivity(new Intent(Setup2Activity.this, Setup3Activity.class));
//销毁当前页面
finish();
//两个界面的切换动画
overridePendingTransition(R.anim.tran_in, R.anim.tran_out);//进入动画和推出动画
}
//点击按钮跳转到下一页
public void next(View v){
/*
//页面跳转
startActivity(new Intent(Setup2Activity.this, Setup3Activity.class));
//销毁当前页面
finish();
//两个界面的切换动画
overridePendingTransition(R.anim.tran_in, R.anim.tran_out);//进入动画和推出动画
*/
}
//点击按钮跳转到上一页
public void previous(View v){
showPrevious();
/*
//页面跳转
startActivity(new Intent(Setup2Activity.this, Setup1Activity.class));
//销毁当前页面
finish();
//两个界面的切换动画
overridePendingTransition(R.anim.tran_previous_in, R.anim.tran_previous_out);//进入动画和推出动画
*/
}
//处理手势滑动页面的处理,委托给GestureDetector手势识别器处理
@Override
public boolean onTouchEvent(MotionEvent event){
//手势识别器进行处理
mDector.onTouchEvent(event);
return super.onTouchEvent(event);
}
}
收拾移动可以用到很多页面,针对这个,在每一个页面上添加这个太麻烦,因此,当在移动端设计的时候需要创建一个基类,从基类中继承基类的方法,主要的方法在基类中实现,不同的方法在基类中创建一个抽象方法,然后让所有的子类去实现。基类实现了按钮点击的上一页和下一页的方法,以及初始化了抽象方法给子类去实现
基类BaseSetupActivity.java
package com.ldw.safe.Activity;
import com.ldw.safe.R;
import android.app.Activity;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.view.GestureDetector;
import android.view.MotionEvent;
import android.view.View;
import android.view.GestureDetector.SimpleOnGestureListener;
/*
* 设置引导页面的父类,这个基类不需要在Manifist文件中注册,因为其不需要展示
* 里面有抽象方法,类设置成抽象类
*/
public abstract class BaseSetupActivity extends Activity {
public SharedPreferences mPref;
private GestureDetector mDector;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_setup2);
mPref = getSharedPreferences("config", MODE_PRIVATE);
//创建手势识别器
mDector = new GestureDetector(this, new SimpleOnGestureListener(){
//监听手势滑动动作,e1是滑动的起始点,e2是滑动的终点。后2个参数是X,Y速度
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY){
//防止上滑动和下滑动幅度过大,不让切换
if(Math.abs(e2.getRawY() - e1.getRawY()) > 200){
return true;
}
//滑动的速度不能太慢
if(Math.abs(velocityX) < 100){
return true;
}
//获取到相对于屏幕的相对坐标,设置最小的滑动距离
//向右滑动,上一页
if((e2.getRawX() - e1.getRawX()) > 200){
showPrevious();
return true;
}
//向左滑动,下一页
if((e1.getRawX() - e2.getRawX()) > 200){
showNext();
return true;
}
return super.onFling(e1, e2, velocityX, velocityY);
}
});
}
//显示上一页,这个需要子类去实现,跳转的页面不是固定的,抽象方法,强制子类去实现
public abstract void showPrevious();
//显示下一页,这个需要子类去实现,跳转的页面不是固定的
public abstract void showNext();
//点击按钮跳转到下一页
public void next(View v){
/*
//页面跳转
startActivity(new Intent(Setup2Activity.this, Setup3Activity.class));
//销毁当前页面
finish();
//两个界面的切换动画
overridePendingTransition(R.anim.tran_in, R.anim.tran_out);//进入动画和推出动画
*/
}
//点击按钮跳转到上一页
public void previous(View v){
showPrevious();
/*
//页面跳转
startActivity(new Intent(Setup2Activity.this, Setup1Activity.class));
//销毁当前页面
finish();
//两个界面的切换动画
overridePendingTransition(R.anim.tran_previous_in, R.anim.tran_previous_out);//进入动画和推出动画
*/
}
//处理手势滑动页面的处理,委托给GestureDetector手势识别器处理
@Override
public boolean onTouchEvent(MotionEvent event){
//手势识别器进行处理
mDector.onTouchEvent(event);
return super.onTouchEvent(event);
}
}
activity使用基类的方法Setup3Activity.java,子类实现抽象方法,同时不需要实现按钮点击的方法
package com.ldw.safe.Activity;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import com.ldw.safe.R;
/*
* 手机防盗第三个设置向导页面
*/
public class Setup3Activity extends BaseSetupActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_setup3);
}
//显示上一页,这个需要子类去实现,跳转的页面不是固定的
public void showPrevious(){
//页面跳转
startActivity(new Intent(Setup3Activity.this, Setup2Activity.class));
//销毁当前页面
finish();
//两个界面的切换动画
overridePendingTransition(R.anim.tran_previous_in, R.anim.tran_previous_out);//进入动画和推出动画
}
//显示下一页,这个需要子类去实现,跳转的页面不是固定的
public void showNext(){
//页面跳转
startActivity(new Intent(Setup3Activity.this, Setup4Activity.class));
//销毁当前页面
finish();
//两个界面的切换动画
overridePendingTransition(R.anim.tran_in, R.anim.tran_out);//进入动画和推出动画
}
}
本文介绍了一种通过手势识别实现Android应用中页面切换的方法。利用GestureDetector手势识别器监听滑动事件,根据滑动方向触发上一页或下一页的跳转,并通过抽象类简化重复代码。
771

被折叠的 条评论
为什么被折叠?



