ListView或GridView添加加载列表动画
2015-09-19 15:13
218 查看
要想实现加载ListView或者GridView控件时带有一定的加载动画,如上图所示,而不是默认的动画样式,最好借助Github上的一个成熟的开源库 — ListViewAnimatin,GitHub地址见 nhaarman/ListViewAnimations
使用起来非常简单,几步搞定;
需要添加listviewanimations_lib-core_3.1.0.jar和nineoldandroids-2.4.0.jar这两个jar包
再添加三行代码即可
所有代码如下(不包括布局):
[code]public class ListViewAnimationActivity extends BaseActivity { private ListView mListView; private MyAdapter myAdapter; private List<String> listData = new ArrayList<String>(); @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.activity_layout_listview_animation); mListView = (ListView) findViewById(R.id.id_listview_animation); listData.clear(); for(int i = 0;i<20;i++){ String title = "我是第"+(i+1)+"只小小鸟,想要飞"; listData.add(title); } myAdapter = new MyAdapter(listData); // 核心代码如下 AnimationAdapter animAdapter = new MyAnimationAdapter(myAdapter); animAdapter.setAbsListView(mListView); // 设置动画延时加载 assert animAdapter.getViewAnimator() != null; animAdapter.getViewAnimator().setInitialDelayMillis(300); // 把绑定了listview适配器的AnimationAdapter设置到ListView上 mListView.setAdapter(animAdapter); } private class MyAdapter extends BaseAdapter { List<String> mListData; public MyAdapter(List<String> mListData) { super(); this.mListData = mListData; } @Override public int getCount() { // TODO Auto-generated method stub return mListData.size(); } @Override public Object getItem(int position) { // TODO Auto-generated method stub return mListData.get(position); } @Override public long getItemId(int position) { // TODO Auto-generated method stub return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { Holder holder; if(convertView == null){ holder = new Holder(); LayoutInflater inflater = LayoutInflater.from(ListViewAnimationActivity.this); convertView = inflater.inflate(R.layout.listview_animation_item, null); holder.text = (TextView) convertView.findViewById(R.id.listviw_item_title); convertView.setTag(holder); }else{ holder = (Holder) convertView.getTag(); } holder.text.setText(mListData.get(position)); return convertView; } class Holder{ TextView text; } } public class MyAnimationAdapter extends AnimationAdapter { public MyAnimationAdapter(BaseAdapter baseAdapter) { super(baseAdapter); // TODO Auto-generated constructor stub } @Override public Animator[] getAnimators(ViewGroup parent, View view) { // TODO Auto-generated method stub Animator bottomInAnimator = ObjectAnimator.ofFloat(view, "translationY", 500, 0); Animator rightInAnimator = ObjectAnimator.ofFloat(view, "translationX", parent.getWidth(), 0); return new Animator[] { bottomInAnimator, rightInAnimator }; } } }
这里面的MyAnimationAdapter中的getAnimators可以更换成你想要的任何其他属性动画样式,而且这种动画不仅仅适用于ListView,对于GridView同样有效
相关文章推荐
- iOS 单例模式
- patch补丁命令 P1 P0 P2
- Android三种实现定时器的方法
- gradlew: Permission Denied
- C语言程序设计(第二版)第11章例题
- Linux shell的条件判断、循环语句及实例
- Linux shell的条件判断、循环语句及实例
- IOException while loading persisted sessions:java.io.EOFException
- form 表单提交, html中ID, name 的区别
- 2015 ACM/ICPC Asia Regional Shenyang Online-1012 Largest Point
- java 构造方法
- php获取客户端真实IP 防止代理和作弊
- hbase启动报错hbase-default.xml file seems to be for and old version of HBase
- 一招解决!!!解决ECSHOP中transport.js和jquery的冲突
- IOS开发—本地化
- jq 全选/取消效果
- Servlet之监听器与过滤器
- UIScrollView pagingEnabled自定义翻页宽度
- Eclipse安装安卓的离线SDK包
- Java使用jackson问题解决