Android中的手势操作

安卓中的手势操作我目前只用到了一种,就是滑动,向左滑,向右滑,向上向下滑,都能给与相应的处理,实现这种机制只要是靠GestureDetector类来实现。

1.new一个GestureDetecture对象

gestureDetector = new GestureDetector(this, new GestureDetector.SimpleOnGestureListener() {

第一个参数是上下文,第二个是监听器,这里用的是这个类里面的一个适配器,就不用写监听器接口里的所有方法了,这里我只实现onFilling方法。第一个参数是初始点,第二个是停止点,计算他们的x,y距离判断是往哪边滑动的。

2.在适配器里面实现对应的方法。

3.重写onTouchEvent()触摸事件调用方法,加上 

gestureDetector.onTouchEvent(event);

然后滑动的时候就会调用适配器中的操作了。

private GestureDetector gestureDetector;
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
		gestureDetector = new GestureDetector(this, new GestureDetector.SimpleOnGestureListener(){
			@Override
			public boolean onFling(MotionEvent e1, MotionEvent e2,
					float velocityX, float velocityY) {
				
				if(Math.abs(e1.getRawY()-e2.getRawY())>100){
					Toast.makeText(getApplicationContext(), "不能这么划", 0).show();
					return true;
				}
				if((e2.getRawX()-e1.getRawX())>200) {
					//往右划
					Toast.makeText(getApplicationContext(), "向右滑", 0).show();
					showPre();
					return true;
				} 	
				if((e1.getRawX()-e2.getRawX())>200) {
					//往左划
					Toast.makeText(getApplicationContext(), "向左滑", 0).show();
					showNext();
					return true;
				}
			
				
				if(Math.abs(velocityX)<100) {
					Toast.makeText(getApplicationContext(), "太慢了", 0).show();
					return true;
				}
				
				return super.onFling(e1, e2, velocityX, velocityY);
			}
		});
	}
	
	@Override
	public boolean onTouchEvent(MotionEvent event) {
		gestureDetector.onTouchEvent(event);
		return super.onTouchEvent(event);
	}


增加:如果一个设置向导有4个界面,我们可以写四段这样相同的手势操作代码来实现,还有一个更好的设计的技巧,这也是我第一次在实际中用到了抽象类。

首先,我们点击下一步或者往左滑动都是可以进行下一步的,这样,不同点就是下一步这个方法的不同。


1.写一个BaseActivity继承Activity,写GestureDetecture,并定义好对应的方法

public abstract class BaseActivity extends Activity {
	private GestureDetector gestureDetector;
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
		gestureDetector = new GestureDetector(this, new GestureDetector.SimpleOnGestureListener(){
			@Override
			public boolean onFling(MotionEvent e1, MotionEvent e2,
					float velocityX, float velocityY) {
				
				if(Math.abs(e1.getRawY()-e2.getRawY())>100){
					Toast.makeText(getApplicationContext(), "不能这么划", 0).show();
					return true;
				}
				if((e2.getRawX()-e1.getRawX())>200) {
					//往右划
					Toast.makeText(getApplicationContext(), "向右滑", 0).show();
					showPre();
					return true;
				} 	
				if((e1.getRawX()-e2.getRawX())>200) {
					//往左划
					Toast.makeText(getApplicationContext(), "向左滑", 0).show();
					showNext();
					return true;
				}
			
				
				if(Math.abs(velocityX)<100) {
					Toast.makeText(getApplicationContext(), "太慢了", 0).show();
					return true;
				}
				
				return super.onFling(e1, e2, velocityX, velocityY);
			}
		});
	}
	
	@Override
	public boolean onTouchEvent(MotionEvent event) {
		gestureDetector.onTouchEvent(event);
		return super.onTouchEvent(event);
	}
	
	public abstract void showPre();
	public abstract void showNext();
	
	public void pre(View view) {
		showPre();
	}
	public void next(View view) {
		showNext();
	}
	
	
}

2.定义这个类为抽象类,写要子类实现抽象方法showPre()和showNext(),这样子类点击下一步的时候,是通过调用pre和next方法来实现的,而这两个方法是通过重写的方法实现的,我们在抽象类中已经定义了这两个方法,子类中就不用再写了,直接有;然后滑动的时候也是调用重写的方法来实现的,这样,每一个向导界面只要继承这个抽象类,实现其中的抽象方法,就能达到目的。


这中精彩的设计模式是我第一次遇到,真的很好!!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值