ListView、RecycleView、动画、单位、ViewPager

文章讲述了从ListView的老版本到新版本的性能提升,重点介绍了ViewHolder的使用以减少findViewById的频繁调用。同时,还讨论了RecyclerView的使用,以及如何通过帧动画和补间动画为列表操作添加动态效果。
摘要由CSDN通过智能技术生成

ListView列表

老版本

public View oldGetView(int position, View convertView, ViewGroup parent) {

        //返回每一个item
        //拿到布局
        if (convertView==null)
        convertView = LayoutInflater.from(context).inflate(R.layout.my_list_view, parent, false);
        //find会耗时需要优化
        TextView textView = convertView.findViewById(R.id.tv);

        textView.setText(data.get(position).getName());
        Log.e("gh", "getView: "+position);
        return convertView;
    }
//次方法为为每行添加值
在老版本方法中,findbyId每次都会带来能耗
100个item则会创建100次find

新版本(性能优化)

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    ViewHolder viewHolder;
    if (convertView==null){
        viewHolder=new ViewHolder();
        convertView = LayoutInflater.from(context).inflate(R.layout.my_list_view, parent, false);
        viewHolder.textView=convertView.findViewById(R.id.tv);
        convertView.setTag(viewHolder);
    }else {
        viewHolder=(ViewHolder) convertView.getTag();
    }
    viewHolder.textView.setText(data.get(position).getName());
    Log.e("gh", "getView: "+position);
    return convertView;
}
private final class ViewHolder{
        TextView textView;
    }
}
//这里只用了一次findbyid
实际上getTag的源码意义就是存储数据集一次存

RecyclerView

1导包

//    添加recyclerview依赖
    implementation 'androidx.recyclerview:recyclerview:1.3.2'

相较与LIstView recycler必须使用holder 并且在布局上没有默认,需要加上布局更加灵活

动画 

帧动画

这还不行需要启动和停止

private boolean flag=true;//动画启动和停止
    @SuppressLint("MissingInflatedId")
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        EdgeToEdge.enable(this);
        setContentView(R.layout.activity_main);

        RelativeLayout relativeLayout = findViewById(R.id.rl);
        AnimationDrawable anim = (AnimationDrawable) relativeLayout.getBackground();
获取动画
        relativeLayout.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (flag){
                    //点击启动
                    anim.start();
                    flag=false;
                }else{
                    //点击关闭
                    anim.stop();
                    flag=true;
                }
            }
        });
    }

补间动画

属性动画 

单位和尺寸

用dp sp

ViewPager

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值