Android GestureDetector 手势滑屏

屏幕左右滑屏事件


1.创建滑屏监听类,独立或者内部类都可:

/**
	 * 滑动监听类
	 * @author dpjiangyb
	 *
	 */
	class MyGuestListner extends SimpleOnGestureListener{

		//监听滑动事件
		@Override
		public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
				float velocityY) {
			
			if (e1.getX() - e2.getX() > 120) { 
				//向左滑动
				pageNext();
				ActivityUtils.animationPushInFromRight(SpecialtyActivity.this, iv_specialtyImage);
			}else if (e1.getX() - e2.getX() < -120){
				//向右滑动
				prePage();
				ActivityUtils.animationPushInFromLeft(SpecialtyActivity.this, iv_specialtyImage);
			}else{
				return false;
			}
			
			return true;
		}  
	}

2.定义GestureDetector 并在主线程中初始化

detector = new GestureDetector(this, new MyGuestListner());
3.重写Activity的onTouchEvent方法,将触屏事件交给 GestureDetector的onTouchEvent处理

@Override
	public boolean onTouchEvent(MotionEvent event) {
		return detector.onTouchEvent(event);
	}

搞定!


4.可能会遇到的问题:

GestureDetector  与 ScrollView 触屏事件冲突:

ScrollView把触屏事件拦截了,所以会发生GestureDetector的滑屏之类的事件无法响应,解决办法是先响应ViewFlipper,再响应ScrollView。

@Override
public boolean dispatchTouchEvent(MotionEvent ev){
//TODOAuto-generatedmethodstub
gd.onTouchEvent(ev); //让GestureDetector响应触碰事件
super.dispatchTouchEvent(ev); //让Activity响应触碰事件
return false;
}

@Override
public boolean onTouchEvent(MotionEvent event){
//TODOAuto-generatedmethodstub
contentScrollView.onTouchEvent(event); //让ScrollView响应触碰事件
return false;
}

一般添加第一个就能搞定。


5.滑屏动画XML

push_left_in.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >

    <translate
        android:duration="500"
        android:fromXDelta="-100%p"
        android:toXDelta="0" />
</set>

push_left_out.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >

    <translate
        android:duration="500"
        android:fromXDelta="0"
        android:toXDelta="-100%p" />

    <alpha
        android:duration="500"
        android:fromAlpha="1.0"
        android:toAlpha="0.1" />

</set>

push_right_in.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >

    <translate
        android:duration="500"
        android:fromXDelta="100%p"
        android:toXDelta="0" />
</set>

push_right_out.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >

    <translate
        android:duration="500"
        android:fromXDelta="0"
        android:toXDelta="100%p" />

    <alpha
        android:duration="500"
        android:fromAlpha="1.0"
        android:toAlpha="0.1" />

</set>



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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值