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

屏幕滑动切换,抽取到父类

需求:
在设置向导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)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值