您的位置:首页 > 其它

手机卫士学习17-屏幕滑动切换,抽取到父类

2015-01-17 15:58 246 查看
屏幕滑动切换,抽取到父类

需求:

在设置向导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)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: