您的位置:首页 > 其它

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同样有效
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: