View事件体系之--View的滑动
来源:互联网 发布:etf联接基金 知乎 编辑:程序博客网 时间:2024/05/06 09:44
我们在安卓开发中会碰到各种各样的滑动,比如ListView的滑动,Viewpager的滑动,scrollview的滑动,滑动让我们的app看起来更加的生动,用户体验也大大增强,如果我们想基于View或者ViewGroup来自定义View的话,那么对View的滑动更加要有所了解。
总体来说一般使View产生滑动可以通过以下几种办法:
一.View自带的scrollTo/scrollBy方法
View自带了使自己滑动的方法,我们来看看这两个方法内部是如何实现让View移动的。
首先是scrollTo():
public void scrollTo(int x, int y) { //参数是要移动到的位置x,y if (mScrollX != x || mScrollY != y) {//判断要移到的位置是否与现在的位置重复 int oldX = mScrollX; int oldY = mScrollY; mScrollX = x; mScrollY = y;
<span style="font-family: Arial, Helvetica, sans-serif;">//流畅的移动view到指定位置,并刷新视图</span>
invalidateParentCaches(); onScrollChanged(mScrollX, mScrollY, oldX, oldY); if (!awakenScrollBars()) { postInvalidateOnAnimation(); } } }
再看看scrollBy():
public void scrollBy(int x, int y) { scrollTo(mScrollX + x, mScrollY + y); }可以看出scrollBy()里面只是调用了scrollTo(),只是他的滑动增加了一个累加减的过程。
二.改变LayoutParams的方法(改变布局参数)
一个view的布局参数决定了这个view的位置,所以我们想要移动view,当然可以通过改变布局参数然后要求重绘的方式来达到移动view的效果。
MarginLayoutParams params=(MarginLayoutParams)mButton.getLayoutParams();//首先获得view的原始布局参数params.width+=10;//改变布局参数params.leftMargin+=10;mButton.requestLayout();
三.利用动画
动画可以轻松实现view的移动,这里不多说了。
三种view的滑动方式的对比:
scrollTo/scrollBy:可以方便的实现滑动并且不影响内部元素的单击事件,但是它只能滑动View的内容,而不能滑动View的本身。
改变布局参数的方法:基本没有什么缺点,实现起来相对麻烦而已,它很适合一些具有交互性的View.
动画方式:主要适用于没有交互的view和实现复杂的动画效果。
上面说的几种view的滑动方式只是实现了View的生硬滑动,为了达到更加好的用户体验,我们还必须让滑动更加的富有弹性,更加的生动,所以下一篇记录一下“弹性滑动Scroller”的实现原理。
- View事件体系之--View的滑动
- View的事件体系之--View的弹性滑动Scroller
- View事件体系之View的的滑动
- View 的事件体系---View的滑动
- View事件体系-View的滑动
- View体系之View的滑动
- View的事件体系(上)(View基础知识,滑动,弹性滑动)
- View的事件体系---V3.2 View的滑动
- 《View的事件体系》(二)View的滑动实现
- 学习笔记:View的事件体系2:View的滑动
- View事件体系(二)View的滑动
- Android开发艺术探索(连载)之View的事件体系(二)View的滑动
- View的事件体系之--View的事件分发机制
- View的事件体系(下)(事件分发,滑动冲突)
- View的事件体系
- View 的事件体系
- View的事件体系
- View的事件体系
- 数据可视化工具整理(仅仅是LIST,会给出详细的关于个例的使用)
- JVM调优总结(8)反思
- HashMap和HashSet(深入HashMap源码分析HashMap元素的存储)
- leetcode-83. Remove Duplicates from Sorted List
- 数字反转 大大的水题
- View事件体系之--View的滑动
- node.js模块--formidable
- JQuery EasyUI 教程
- 重新学javaweb---Response&Request
- 数组划分
- Grunt使用初步
- 两个不一样的fragment中控件id一样造成的bug
- MySQL命令行操作复习
- 一个帖子解决服务器与客户端传递对象的问题,JSON解析两种方法