Android编程ViewPager回d效果实例分析

Android编程ViewPager回d效果实例分析,第1张

概述本文实例讲述了Android编程ViewPager回d效果。分享给大家供大家参考,具体如下:

本文实例讲述了AndroID编程VIEwPager回d效果。分享给大家供大家参考,具体如下:

其实在我们很多应用中都看到当VIEwPager滑到第一页或者最后一页的时候,如果再滑动的时候,就会有一个缓冲的过程,也就是回d效果。之前在研究回d效果的时候,也顺便实现了VIEwPager的回d效果,其实也很简单,一下是实现代码,注释比较少:

package com.freesonfish.vIEwpager_2; import androID.content.Context; import androID.graphics.Rect; import androID.support.v4.vIEw.VIEwPager; import androID.util.AttributeSet; import androID.vIEw.KeyEvent; import androID.vIEw.MotionEvent; import androID.vIEw.animation.TranslateAnimation; public class MyVIEwPager extends VIEwPager {   private Rect mRect = new Rect();//用来记录初始位置   private int pagerCount = 3;   private int currentItem = 0;   private boolean handleDefault = true;   private float preX = 0f;   private static final float RATIO = 0.5f;//摩擦系数   private static final float SCRolL_WIDTH = 30f;   public MyVIEwPager(Context context) {     super(context);   }   public MyVIEwPager(Context context,AttributeSet attrs) {     super(context,attrs);   }   //设置总共有多少页,请记得调用它   public voID setpagerCount(int pagerCount) {     this.pagerCount = pagerCount;   }   //这是当前是第几页,请在onPageSelect方法中调用它。   public voID setCurrentIndex(int currentItem) {     this.currentItem = currentItem;   }   @OverrIDe   public boolean dispatchKeyEvent(KeyEvent event) {     return super.dispatchKeyEvent(event);   }   @OverrIDe   public boolean onIntercepttouchEvent(MotionEvent arg0) {     if (arg0.getAction() == MotionEvent.ACTION_DOWN) {       preX = arg0.getX();//记录起点     }     return super.onIntercepttouchEvent(arg0);   }   @OverrIDe   public boolean ontouchEvent(MotionEvent arg0) {     switch (arg0.getAction()) {     case MotionEvent.ACTION_UP:       ontouchActionUp();       break;     case MotionEvent.ACTION_MOVE:       //当时滑到第一项或者是最后一项的时候。       if ((currentItem == 0 || currentItem == pagerCount - 1)) {         float NowX = arg0.getX();         float offset = NowX - preX;         preX = NowX;         if (currentItem == 0) {           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 (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(arg0);   }   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 = null;     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程序设计有所帮助。

总结

以上是内存溢出为你收集整理的Android编程ViewPager回d效果实例分析全部内容,希望文章能够帮你解决Android编程ViewPager回d效果实例分析所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1142230.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-31
下一篇 2022-05-31

发表评论

登录后才能评论

评论列表(0条)

保存