Android 实现ViewPager边界回弹效果实例代码
废话不多说了,直接给大家贴代码了,具体代码如下所示:
publicclassBounceBackViewPagerextendsViewPager{ privateintcurrentPosition=0; privateRectmRect=newRect();//用来记录初始位置 privatebooleanhandleDefault=true; privatefloatpreX=0f; privatestaticfinalfloatRATIO=0.5f;//摩擦系数 privatestaticfinalfloatSCROLL_WIDTH=10f; publicBounceBackViewPager(Contextcontext){ super(context); } publicBounceBackViewPager(Contextcontext,AttributeSetattrs){ super(context,attrs); } @Override publicbooleandispatchKeyEvent(KeyEventevent){ returnsuper.dispatchKeyEvent(event); } @Override publicbooleanonInterceptTouchEvent(MotionEventev){ if(ev.getAction()==MotionEvent.ACTION_DOWN){ preX=ev.getX();//记录起点 currentPosition=getCurrentItem(); } returnsuper.onInterceptTouchEvent(ev); } @Override publicbooleanonTouchEvent(MotionEventev){ switch(ev.getAction()){ caseMotionEvent.ACTION_UP: onTouchActionUp(); break; caseMotionEvent.ACTION_MOVE: if(getAdapter().getCount()==1){ floatnowX=ev.getX(); floatoffset=nowX-preX; preX=nowX; if(offset>SCROLL_WIDTH){//手指滑动的距离大于设定值 whetherConditionIsRight(offset); }elseif(offset<-SCROLL_WIDTH){ whetherConditionIsRight(offset); }elseif(!handleDefault){//这种情况是已经出现缓冲区域了,手指慢慢恢复的情况 if(getLeft()+(int)(offset*RATIO)!=mRect.left){ layout(getLeft()+(int)(offset*RATIO),getTop(),getRight()+(int)(offset*RATIO),getBottom()); } } }elseif((currentPosition==0||currentPosition==getAdapter().getCount()-1)){ floatnowX=ev.getX(); floatoffset=nowX-preX; preX=nowX; if(currentPosition==0){ if(offset>SCROLL_WIDTH){//手指滑动的距离大于设定值 whetherConditionIsRight(offset); }elseif(!handleDefault){//这种情况是已经出现缓冲区域了,手指慢慢恢复的情况 if(getLeft()+(int)(offset*RATIO)>=mRect.left){ layout(getLeft()+(int)(offset*RATIO),getTop(),getRight()+(int)(offset*RATIO),getBottom()); } } }else{ if(offset<-SCROLL_WIDTH){ whetherConditionIsRight(offset); }elseif(!handleDefault){ if(getRight()+(int)(offset*RATIO)<=mRect.right){ layout(getLeft()+(int)(offset*RATIO),getTop(),getRight()+(int)(offset*RATIO),getBottom()); } } } }else{ handleDefault=true; } if(!handleDefault){ returntrue; } break; default: break; } returnsuper.onTouchEvent(ev); } privatevoidwhetherConditionIsRight(floatoffset){ if(mRect.isEmpty()){ mRect.set(getLeft(),getTop(),getRight(),getBottom()); } handleDefault=false; layout(getLeft()+(int)(offset*RATIO),getTop(),getRight()+(int)(offset*RATIO),getBottom()); } privatevoidonTouchActionUp(){ if(!mRect.isEmpty()){ recoveryPosition(); } } privatevoidrecoveryPosition(){ TranslateAnimationta=newTranslateAnimation(getLeft(),mRect.left,0,0); ta.setDuration(300); startAnimation(ta); layout(mRect.left,mRect.top,mRect.right,mRect.bottom); mRect.setEmpty(); handleDefault=true; } }
以上所述是小编给大家介绍的Android实现ViewPager边界回弹效果实例代码,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对毛票票网站的支持!