废话不多说了,直接给大家贴代码了,具体代码如下所示:
public class BounceBackVIEwPager extends VIEwPager { private int currentposition = 0; private Rect mRect = new Rect();//用来记录初始位置 private boolean handleDefault = true; private float preX = 0f; private static final float RATIO = 0.5f;//摩擦系数 private static final float SCRolL_WIDTH = 10f; public BounceBackVIEwPager(Context context) { super(context); } public BounceBackVIEwPager(Context context,AttributeSet attrs) { super(context,attrs); } @OverrIDe public boolean dispatchKeyEvent(KeyEvent event) { return super.dispatchKeyEvent(event); } @OverrIDe public boolean onIntercepttouchEvent(MotionEvent ev) { if (ev.getAction() == MotionEvent.ACTION_DOWN) { preX = ev.getX();//记录起点 currentposition = getCurrentItem(); } return super.onIntercepttouchEvent(ev); } @OverrIDe public boolean ontouchEvent(MotionEvent ev) { switch (ev.getAction()) { case MotionEvent.ACTION_UP: ontouchActionUp(); break; case MotionEvent.ACTION_MOVE: if (getAdapter().getCount() == 1) { float NowX = ev.getX(); float offset = NowX - preX; preX = NowX; if (offset > SCRolL_WIDTH) {//手指滑动的距离大于设定值 whetherConditionIsRight(offset); } else if (offset < -SCRolL_WIDTH) { whetherConditionIsRight(offset); } else if (!handleDefault) {//这种情况是已经出现缓冲区域了,手指慢慢恢复的情况 if (getleft() + (int) (offset * RATIO) != mRect.left) { layout(getleft() + (int) (offset * RATIO),gettop(),getRight() + (int) (offset * RATIO),getBottom()); } } } else if ((currentposition == 0 || currentposition == getAdapter().getCount() - 1)) { float NowX = ev.getX(); float offset = NowX - preX; preX = NowX; if (currentposition == 0) { if (offset > SCRolL_WIDTH) {//手指滑动的距离大于设定值 whetherConditionIsRight(offset); } else if (!handleDefault) {//这种情况是已经出现缓冲区域了,手指慢慢恢复的情况 if (getleft() + (int) (offset * RATIO) >= mRect.left) { layout(getleft() + (int) (offset * RATIO),getBottom()); } } } else { if (offset < -SCRolL_WIDTH) { whetherConditionIsRight(offset); } else if (!handleDefault) { if (getRight() + (int) (offset * RATIO) <= mRect.right) { layout(getleft() + (int) (offset * RATIO),getBottom()); } } } } else { handleDefault = true; } if (!handleDefault) { return true; } break; default: break; } return super.ontouchEvent(ev); } private voID whetherConditionIsRight(float offset) { if (mRect.isEmpty()) { mRect.set(getleft(),getRight(),getBottom()); } handleDefault = false; layout(getleft() + (int) (offset * RATIO),getBottom()); } private voID ontouchActionUp() { if (!mRect.isEmpty()) { recoveryposition(); } } private voID recoveryposition() { TranslateAnimation ta = new TranslateAnimation(getleft(),mRect.left,0); ta.setDuration(300); startAnimation(ta); layout(mRect.left,mRect.top,mRect.right,mRect.bottom); mRect.setEmpty(); handleDefault = true; }}
以上所述是小编给大家介绍的AndroID 实现VIEwPager边界回d效果实例代码,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对编程小技巧网站的支持!
总结以上是内存溢出为你收集整理的Android 实现ViewPager边界回d效果实例代码全部内容,希望文章能够帮你解决Android 实现ViewPager边界回d效果实例代码所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)