模仿ios的scrollView

来源:互联网 发布:emule kad网络 编辑:程序博客网 时间:2024/05/21 11:36

做了这么久项目了,有时会被吐槽,滑动块儿好死板,不和谐~~~   so,我们可以模仿一下ios的滑块儿。ps:改代码源自一个前辈。但是我忘了是谁了,在此非常感谢他.

public class IOSScrollview extends ScrollView {   // 拖动的距离 size = 4 的意思 只允许拖动屏幕的1/4   private static final int size = 4;   private View inner;   private float y;   private Rect normal = new Rect();;   public IOSScrollview(Context context) {      super(context);   }   public IOSScrollview(Context context, AttributeSet attrs) {      super(context, attrs);   }   @Override   protected void onFinishInflate() {      if (getChildCount() > 0) {         inner = getChildAt(0);      }   }   @Override   public boolean onTouchEvent(MotionEvent ev) {      if (inner == null) {         return super.onTouchEvent(ev);      } else {         commOnTouchEvent(ev);      }      return super.onTouchEvent(ev);   }   public void commOnTouchEvent(MotionEvent ev) {      int action = ev.getAction();      switch (action) {         case MotionEvent.ACTION_DOWN:            y = ev.getY();            break;         case MotionEvent.ACTION_UP:            if (isNeedAnimation()) {               // Log.v("mlguitar", "will up and animation");               animation();            }            break;         case MotionEvent.ACTION_MOVE:            final float preY = y;            float nowY = ev.getY();            /**             * size=4 表示 拖动的距离为屏幕的高度的1/4             */            int deltaY = (int) (preY - nowY) / size;            // 滚动            // scrollBy(0, deltaY);            y = nowY;            // 当滚动到最上或者最下时就不会再滚动,这时移动布局            if (isNeedMove()) {               if (normal.isEmpty()) {                  // 保存正常的布局位置                  normal.set(inner.getLeft(), inner.getTop(),                        inner.getRight(), inner.getBottom());                  return;               }               int yy = inner.getTop() - deltaY;               // 移动布局               inner.layout(inner.getLeft(), yy, inner.getRight(),                     inner.getBottom() - deltaY);            }            break;         default:            break;      }   }   // 开启动画移动   public void animation() {      // 开启移动动画      TranslateAnimation ta = new TranslateAnimation(0, 0, inner.getTop(),            normal.top);      ta.setDuration(200);      inner.startAnimation(ta);      // 设置回到正常的布局位置      inner.layout(normal.left, normal.top, normal.right, normal.bottom);      normal.setEmpty();   }   // 是否需要开启动画   public boolean isNeedAnimation() {      return !normal.isEmpty();   }   // 是否需要移动布局   public boolean isNeedMove() {      int offset = inner.getMeasuredHeight() - getHeight();      int scrollY = getScrollY();      if (scrollY == 0 || scrollY == offset) {         return true;      }      return false;   }}
是不是很简单,拿来就用了呢?!!! 

哈哈哈!!!

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 孩子注意力不集中走神怎么办 上课老走神注意力不集中怎么办 注意力不集中老走神怎么办 7岁儿童视力0.6怎么办 三岁宝宝注意力不集中怎么办 四岁宝宝注意力不集中怎么办 一直在想一件事怎么办 买的家具味道大怎么办 买的木床有味道怎么办 宝宝拍胸片衣服有扣子怎么办 前扣内衣扣子坏了怎么办 运动内衣穿上平胸怎么办 文胸的海绵变形了怎么办 文胸背部松紧变形了怎么办 黑色裤子被漂白水漂红了怎么办 黑色裤子晒红了怎么办 黑色裤子泛红了怎么办 黑色裤子洗红了怎么办 新内衣穿了痒怎么办 灰色针织运动裤洗完发黄怎么办 皮衣买大了一号怎么办 紧身衣破了一个洞怎么办 紧身衣破了一个小洞怎么办 内衣肩带不带调整的怎么办 不正确佩戴胸罩导致下垂怎么办 增肌时期晚上饿怎么办 啤酒和可乐喝了怎么办 脸部毛孔堵塞不出汗怎么办 减肥运动完饿了怎么办 想减肥晚上饿了怎么办 孕妇喝不进去水怎么办 跑步喝多了水怎么办 衣柜门轮子坏了怎么办 穿瑜伽裤下边有缝怎么办 3岁宝宝比较内向怎么办 我想和我同学搞基怎么办 自己做的葡萄酒太甜怎么办 吉米学校想退款怎么办 汽车租赁公司不退押金怎么办 身材不好怎么办健身教练形象照 反祈祷式做不到怎么办