通过listview实现自定义TimePicker附带动画效果
来源:互联网 发布:cocostudio 1.6 mac 编辑:程序博客网 时间:2024/05/21 01:54
通过listview实现自定义TimePicker
转载请注明来源
代码连接
https://github.com/AndroidMsky/MyPickerView
欢迎加安卓开发交流群:308372687(博主尽可能帮助大家)
老规矩先上效果图:
看了这个效果图,大家不要疑惑,没错这就是我们常见的listview。次控件没用重写listview的代码,只不过通过一个adapter实现这种高级效果。下面看看具体的分析实现吧。
几个要点:
1.如何实现循环滚动的listview。
2.如何实现滑动动画。
3.如果实现多种不同大小的item。
1.如何实现循环滚动的listview。
思路:把原有的数据已3倍。映射到listview中。通过onScroll方法,不断将滑动的位置返回到中间。比如数据是12345。那么我们的listview数据就是123451234512345。如果我们到了第3个4的位置。那么就回到第2个4的位置。这样就实现了循环。如果数据量够大,我们用3倍,如果特别少那么就可以用5倍甚至7倍来优化滑动循环。
代码:
@Override public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { // TODO Auto-generated method stub top = firstVisibleItem; if (firstVisibleItem <= 2) { listView.setSelection(max + 2); } else if (firstVisibleItem + visibleItemCount > m1111.getCount() - 2) { listView.setSelection(firstVisibleItem - max); } }
2.如何实现滑动动画。
思路:通过listview实现onScrollStateChanged接口,监听到正在滚动,停止滚动事件。改变相应的item size字段。并后用通过adapter映射出来。在adapter中的getview方法中实现属性动画。
itembean的代码:
public class ItemBean { public String num; public int size; public ItemBean(String num,int size) { this.num=num; this.size=size; }}
滚动刷新itembean
if (scrollState == SCROLL_STATE_TOUCH_SCROLL && byaotu == false) { if (lockforsrcoll == false) { dataList.clear(); for (int i = 0; i < max * 3; i++) { dataList.add(new ItemBean("" + i % max, 0)); } m1111.notifyDataSetChanged(); }
3.如果实现多种不同大小的item。
思路:仔细观察gif可以发现,item共有6种形态。最大,小1上,小1下,小2上,小2下,滚动中。我们为这6种形态设定6种不通的size值并在adapter中的getview方法中,进行相应的大小变化从而实现不通的大小item并附带动画效果。
比如当size为-1是时。
if (bean.size==-1) { ObjectAnimator a2=ObjectAnimator.ofFloat( holder.numtextview, "scaleX",b(1.2F),b(1F)); a2.setDuration(CHANGETIME); a2.start(); ObjectAnimator a22=ObjectAnimator.ofFloat( holder.numtextview, "scaleY", b(1.2F),b(1F)); a22.setDuration(CHANGETIME); a22.start(); ObjectAnimator a33=ObjectAnimator.ofFloat( holder.numtextview, "RotationX", 0,30); a33.setDuration(CHANGETIME); a33.start(); ObjectAnimator.ofFloat(holder.numtextview, "Alpha", 0.4F,0.6F).setDuration(CHANGETIME).start(); holder.numtextview.setText(bean.num); }
这个例子也为了说明,很多效果的实现不一定很死板,代码要灵活。不是要效果就一定要去重写view。谷歌有很多已经为我们封装好很多东西,大家灵活的去使用吧!
转载请注明来源
代码连接
https://github.com/AndroidMsky/MyPickerView
欢迎加安卓开发交流群:308372687(博主尽可能帮助大家)
- 通过listview实现自定义TimePicker附带动画效果
- 自定义ListView加载动画,实现不一样的加载效果
- 通过画图实现动画效果
- ListView之简单动画效果实现
- 【Android】ListView淡入动画效果的实现
- 在ListView中实现动画效果
- 使用LayoutAnimationController实现ListView动画效果
- Android自定义一个时间轴,通过ListView来实现时间轴的效果
- android 实现拉出回弹效果通过自定义ListView重写overScrollBy()
- 自定义ListView实现底部动画更新item
- 自定义控件-实现ListView Item进入动画
- iphone--通过UIView实现动画效果
- 视图动画效果 通过layer层实现
- 通过Graphics对象来实现动画效果
- 通过Graphics对象来实现动画效果
- 通过jquery实现页面的动画效果
- 通过js实现简单的动画效果
- 自定义listview实现下拉刷新的效果
- 类成员函数作为线程函数
- IOS中对于多个按钮,选中其中一个,其他按钮选中状态为NO
- MySQL性能优化的最佳20+条经验
- Swift_运算符_流程控制
- iOS中关于设置label字体样式
- 通过listview实现自定义TimePicker附带动画效果
- Java集合框架指treemap
- Linux — 网络配置
- 获取掩码
- 对标Google,微软开源其人工智能CNTK
- VPN与NAT--Surge原理简单分析
- linux-find命令用法
- OpenCV的内存回收问题
- 【机器学习】神经网络-激活函数-面面观(Activation Function)