android开发仿ios的UIScrollView
来源:互联网 发布:淘宝店刷钻是真的吗 编辑:程序博客网 时间:2024/06/02 05:44
转载请注明出处:http://blog.csdn.net/sw950729/article/details/52050777
本文出自:马云飞的博客
今天重新装了编译器,结果崩无极限,真是日了狗了了。刚刚才知道问题在哪边。
好了,说正事,对于ios开发我没接触,不是很了解,百度了半天,差不多就是UIScrollView的把。如果不对,请指证。具体什么效果呢,我刚才拿朋友的iphone手机看了下,iphone的设置界面,第一个列表往下拉可以继续滚,上拉同理。不过android好像没有自带的这种情况。
我把这种效果称为滚无极限的scollview。
下面就来上源码:
首先,最最最重要的就是判断当前视图是否为空,你空视图滚不滚好像没啥区别,除了android 5.0的scrollview自带了那种弧度。好像没什么软用~~~
//视图不为空即可滚动 protected void onFinishInflate() { if (getChildCount() > 0) { childview = getChildAt(0); } }
这个属性我也是刚知道没多久,意思是当所有的布局呈现完成之后调用这个方法。
我这边附上view常用的方法,你们可以自行研究,有好多方法我也不知道~~~.
自定义 View的常用方法:
- onFinishInflate() 当View中所有的子控件 均被映射成xml后触发
- onMeasure(int, int) 确定所有子元素的大小
- onLayout(boolean, int, int, int, int) 当View分配所有的子元素的大
小和位置时触发 - onSizeChanged(int, int, int, int) 当view的大小发生变化时触发
- onDraw(Canvas) view渲染内容的细节
- onKeyDown(int, KeyEvent) 有按键按下后触发
- onKeyUp(int, KeyEvent) 有按键按下后弹起时触发
- onTrackballEvent(MotionEvent) 轨迹球事件
- onTouchEvent(MotionEvent)触屏事件
- onFocusChanged(boolean, int, Rect) 当View获取 或失去焦点时触发
- onWindowFocusChanged(boolean) 当窗口包含的view获取或失去焦点时触发
- onAttachedToWindow() 当view被附着到一个窗口时触发
- onDetachedFromWindow() 当view离开附着的窗口时触发,提示该方法和 onAttachedToWindow() 是相反的。
- onWindowVisibilityChanged(int) 当窗口中包含的可见的view发生变化时触发
以上是View实现的一些基本接口的回调方法,一般我们需要处理画布的显示时,重写onDraw(Canvas)用的的是最多的。
接下来就是ontouch事件来判断位移和回弹的效果啦:
if (childview != null) { int action = event.getAction(); switch (action) { case MotionEvent.ACTION_DOWN: break; case MotionEvent.ACTION_UP: //判断是否需要动画 if (!normal.isEmpty()) { animation(); isCount = false; } break; case MotionEvent.ACTION_MOVE: final float DownY = startY; float moveY = event.getY(); int distance = (int) (DownY - moveY); if (!isCount) { distance = 0; // 在这里要归0. } startY = moveY; if (isNeedMove()) { //顶部 if (normal.isEmpty()) { normal.set(childview.getLeft(), childview.getTop(), childview.getRight(), childview.getBottom()); } //底部 childview.layout(childview.getLeft(), childview.getTop() - distance / 2, childview.getRight(), childview.getBottom() - distance / 2); } isCount = true; break; }
后面就是判断是否需要滚动和回弹的动画效果了。
public void animation() { // 开启移动动画 TranslateAnimation animation = new TranslateAnimation(0, 0, childview.getTop(), normal.top); animation.setDuration(200); childview.startAnimation(animation); // 设置回到正常的布局位置 childview.layout(normal.left, normal.top, normal.right, normal.bottom); normal.setEmpty(); }
public boolean isNeedMove() { int offset = childview.getHeight() - getHeight(); int scrollY = getScrollY(); // 0是顶部,后面那个是底部 if (scrollY == 0 || scrollY == offset) { return true; } return false; }
好了,一个滚,滚,滚,滚无极限的scrollview就诞生了。其实我感觉这个实用性不是很大,看个人需求了。其实也是蛮好玩的~
好了。发现时间也不早了。该睡觉了。我的android群:232748032。欢迎加入。
0 0
- android开发仿ios的UIScrollView
- iOS开发 仿相册的一个小Demo 相关UICollectionView,UIScrollView,AFNetworking
- iOS开发-UIScrollView的学习
- IOS 基础开发之 UIScrollView的使用
- IOS开发之UIScrollView的属性总结
- iOS开发学习笔记-UIScrollView的用法
- iOS开发UIScrollView的底层实现
- iOS开发学习笔记-UIScrollView的用法
- iOS开发tips-UIScrollView的Autlayout布局
- iOS开发tips-UIScrollView的Autlayout布局
- iOS开发之UIScrollView
- IOS开发- UIScrollView
- iOS开发 ----- UIScrollview UIPageControl
- iOS开发系列-- UIScrollView
- iOS开发-UIScrollView详解
- iOS开发基础- UIScrollView
- iOS开发系列 UIScrollView
- android开发仿IOS滑动开关
- HDU1847之SG值
- wait和waitpid函数
- 第4课 Go数组Array和切片Slice
- MySQL读写分离介绍
- 【例题】【拓扑排序】NKOJ 3731 wjj的排列序列
- android开发仿ios的UIScrollView
- IllegalStateException异常处理
- (23)HTML标签详解之<frameset><frame><iframe><noframes>
- Java源码-简单的绘图板
- HDU1846之巴什博弈
- vue.js的增删改查
- 趣图展现程序员职业生涯的11个阶段
- GC算法与内存回收
- Android 热补丁技术的探索与简单实战----Qzone方案