模仿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
- 模仿ios的scrollView
- iOS模仿QQ的折叠
- andorid模仿iOS的UISegmentedControl
- iOS scrollview的实现
- iOS 弹性HeaderView 的ScrollView
- iOS 自定义scrollView的pagingEnabled
- iOS scrollView的自动布局
- IOS学习 scrollView的代理
- iOS 浅谈ScrollView的约束。
- iOS xib ScrollView的contentSize
- iOS 轮播图的实现scrollView
- iOS 模仿系统的抖动动画
- 模仿IOS里面的UIActionSheet控件
- IOS-使用UiTableview模仿UICollectionView的效果
- iOS 模仿淘宝的首页UI
- Android模仿IOS的自定义switch
- IOS开发之模仿android的FloatingActionButton
- 模仿ios风格的ItemPicker控件
- Activity跳转到Fragment的问题
- 《Objective-C学习总结》
- 贪心算法-最近点对问题
- jdk动态代理
- [BZOJ1018][SHOI2008]堵塞的交通traffic(线段树)
- 模仿ios的scrollView
- iOS 组件化方案探索
- 出现「java.lang.UnsatisfiedLinkError… has text relocations」的解决办法
- BZOJ 3223 Tyvj 1729 文艺平衡树
- Android学习笔记(一)
- Android Studio: cannot resolve symbol R
- 平面图3D化显示
- node下调试出现v8debug is not defined
- 使用idea创建gradle项目