屏幕滑动切换,抽取到父类
需求:
在设置向导A,B,C,D界面中,左右滑动可以界面相互切换。
1 定义一个手势识别器
2 实例化一个手势识别器
3 使用这个手势识别器
---------------------------------------------------
2 实例化一个手势识别器
3 使用这个手势识别器
四个界面都需要实现左右滑动切换界面的效果,所以有两种办法:
1 每一个界面都完成上面三步。
2 将手势识别器三步抽取到一个自定义的Activity,四个界面分别都继承这个Activity
第一种不说了,下面来说第二种方法:
封装手势识别器,并添加2个抽象方法,为左划界面跳转和右划界面跳转。
然后在界面继承这个Activity复写左划右划方法,方法里实现页面跳转Intent
具体源码参考:
需求:
在设置向导A,B,C,D界面中,左右滑动可以界面相互切换。
1 定义一个手势识别器
2 实例化一个手势识别器
3 使用这个手势识别器
---------------------------------------------------
1 定义一个手势识别器
//1.定义一个手势识别器
private GestureDetector detector;
2 实例化一个手势识别器
//2.实例化手势识别器
detector = new GestureDetector(this, new SimpleOnGestureListener(){
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2,
float velocityX, float velocityY) {
// TODO Auto-generated method stub
//屏蔽划得很慢的情况
if(Math.abs(velocityX)<200){
Toast.makeText(getApplicationContext(), "划得太慢了", Toast.LENGTH_SHORT).show();
return true;
}
//屏蔽斜划的情况
if(Math.abs(e2.getRawY()-e1.getRawY())>100){
Toast.makeText(getApplicationContext(), "不能斜着划", Toast.LENGTH_SHORT).show();
return true;
}
//从左往右划,显示上一个界面
if(e2.getRawX()-e1.getRawX()>200){
System.out.println("从左往右划,显示上一个界面");
showPre();
return true;
}
//从右往左划,显示下一个界面
if(e1.getRawX()-e2.getRawX() >200){
System.out.println("从右往左划,显示下一个界面");
showNext();
return true;
}
return super.onFling(e1, e2, velocityX, velocityY);
}
});
3 使用这个手势识别器
/**
* 3.使用手势识别器
*/
@Override
public boolean onTouchEvent(MotionEvent event) {
// TODO Auto-generated method stub
detector.onTouchEvent(event);
return super.onTouchEvent(event);
}
------------------------------------------------------------------------------
四个界面都需要实现左右滑动切换界面的效果,所以有两种办法:
1 每一个界面都完成上面三步。
2 将手势识别器三步抽取到一个自定义的Activity,四个界面分别都继承这个Activity
第一种不说了,下面来说第二种方法:
封装手势识别器,并添加2个抽象方法,为左划界面跳转和右划界面跳转。
package com.itheima.mobilesafe;
import android.app.Activity;
import android.os.Bundle;
import android.view.GestureDetector;
import android.view.MotionEvent;
import android.view.View;
import android.view.GestureDetector.SimpleOnGestureListener;
import android.widget.Toast;
public abstract class BaseSetupActivity extends Activity {
//1.定义一个手势识别器
private GestureDetector detector;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
//2.实例化手势识别器
detector = new GestureDetector(this, new SimpleOnGestureListener(){
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2,
float velocityX, float velocityY) {
// TODO Auto-generated method stub
//屏蔽划得很慢的情况
if(Math.abs(velocityX)<200){
Toast.makeText(getApplicationContext(), "划得太慢了", Toast.LENGTH_SHORT).show();
return true;
}
//屏蔽斜划的情况
if(Math.abs(e2.getRawY()-e1.getRawY())>100){
Toast.makeText(getApplicationContext(), "不能斜着划", Toast.LENGTH_SHORT).show();
return true;
}
//从左往右划,显示上一个界面
if(e2.getRawX()-e1.getRawX()>200){
System.out.println("从左往右划,显示上一个界面");
showPre();
return true;
}
//从右往左划,显示下一个界面
if(e1.getRawX()-e2.getRawX() >200){
System.out.println("从右往左划,显示下一个界面");
showNext();
return true;
}
return super.onFling(e1, e2, velocityX, velocityY);
}
});
}
public abstract void showNext();
public abstract void showPre();
/**
* 下一步点击事件
*
* @param view
*/
public void next(View view) {
showNext();
}
/**
* 上一步点击事件
*
* @param view
*/
public void pre(View view){
showPre();
}
/**
* 3.使用手势识别器
*/
@Override
public boolean onTouchEvent(MotionEvent event) {
// TODO Auto-generated method stub
detector.onTouchEvent(event);
return super.onTouchEvent(event);
}
}
然后在界面继承这个Activity复写左划右划方法,方法里实现页面跳转Intent
package com.itheima.mobilesafe;
import android.content.Intent;
import android.os.Bundle;
public class Setup2Activity extends BaseSetupActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_setup2);
}
@Override
public void showNext() {
// TODO Auto-generated method stub
Intent intent = new Intent(this, Setup3Activity.class);
startActivity(intent);
finish();
overridePendingTransition(R.anim.tran_in, R.anim.tran_out);
}
@Override
public void showPre() {
// TODO Auto-generated method stub
Intent intent = new Intent(this, Setup1Activity.class);
startActivity(intent);
finish();
overridePendingTransition(R.anim.tran_pre_in, R.anim.tran_pre_out);
}
}
具体源码参考:
http://yunpan.cn/cyppdh2fpRcVb (提取码:5edc)