Android实现全局右滑返回
目前Android手机的全面屏越来越盛行,很多应用都已经支持了右滑返回上一级页面的功能,那么这个功能如何实现呢?
首先来说下思路吧,主要是通过MotionEvent这个事件通过对这个事件的不同处理,在通过PointF来监听按下去的点,处于什么位置。
接下来,通过代码给大家讲解一下
显示新建一个Gesture的这个样一个类,用来处理,滑动的逻辑。
publicclassGestureHandler{}
接下来是定义相关的一些屏幕宽高、滑动的区间的一些表示
//屏幕宽高 intsWidth=1280; intsHeight=720; //按下的点 PointFdown; //Y轴滑动的区间 floatminY,maxY; //按下时的时间 longdownTime; //边缘判定距离, doublemargin=sWidth*0.035; //Y轴最大区间范围,即Y轴滑动超出这个范围不触发事件 doubleheight=sHeight*0.2; //X轴最短滑动距离X轴滑动范围低于此值不触发事件 doublewidth=sWidth*0.1; //是否处于此次滑动事件 booleanwork=false;
当然了,这里我的屏幕是这样子,屏幕的宽高是按照自己的实际情况的。
然后是用PointF来监听
publicbooleanpoint(PointFup){ longupTime=System.currentTimeMillis(); floattWidth=Math.abs(down.x-up.x); if(maxY-minYwidth&&(upTime-downTime)/tWidth<2.5){ //起点在左边 if(down.x 在定义好之后就可以使用MontionEvent,来进行一个处理了
publicbooleandoEventF(MotionEventevent){ switch(event.getActionMasked()){ caseMotionEvent.ACTION_DOWN: //记录下按下的点 downTime=System.currentTimeMillis(); down=newPointF(event.getX(),event.getY()); minY=maxY=down.y; //判定是否处于边缘侧滑 if(down.xdown.y){ maxY=event.getY(); }else{ minY=event.getY(); } break; caseMotionEvent.ACTION_UP: if(work){ handle(newPointF(event.getX(),event.getY())); work=false; returntrue; } work=false; } returnwork; } 那这里是左滑退出当前activity
publicvoidleft(){ //处理左边缘滑动事件,这里你可以自己写一个ActivityUtil,用来finish当前的activity(这个网上很多,随便搜一下就有了) }这里处理好之后,就要思考一下了,如何能达到全局的右滑返回了,那么你就需要让所有的activity继承一个BaseActivity,然后再这个基类里面来处理是否需要右滑返回。
/**手势监听*/ GestureHandlermGestureHandler; /**是否需要监听手势关闭功能*/ privatebooleanmNeedBackGesture=false;然后通过一个dispatchTouchEvent来进行一个手势分发
@Override publicbooleandispatchTouchEvent(MotionEventevent){ //TODOAuto-generatedmethodstub if(mNeedBackGesture){ returnmGestureHandler.doEventF(event)||super.dispatchTouchEvent(event); } returnsuper.dispatchTouchEvent(event); }设置一个手势监听,便于一些特殊的activity设置不可滑动退出,比如首页
publicfinalvoidsetNeedBackGesture(booleanmNeedBackGesture){ this.mNeedBackGesture=mNeedBackGesture; }那么你在使用的时候只需要再onCreate方法里面new一个Gesture对象就好了
如果你想在首页做不返回,同样在onCreate方法里面设置setNeedBackGesrure(false)就还可以了
这样你就实现了一个全局的右滑返回了。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。