小工具知识网

当前位置: 首页 > 行业知识 > android 快速实现 recyclerview 的所有item 都执行动画

行业知识

android 快速实现 recyclerview 的所有item 都执行动画

2026-11-12 19:19:52 来源:互联网转载

1.在aindex.php/tags-41973.html" >dapter 里面重写onViewAttachedToWindow 和 onViewDetachedFromWindow 两个方法

()
package com.example.widget;import android.view.ViewGroup;import android.view.animation.Animation;import android.view.animation.LinearInterpolator;import android.view.animation.RotateAnimation;import androidx.annotation.NonNull;import androidx.recyclerview.widget.RecyclerView;public class GridAdapter extends RecyclerView.Adapter {    private boolean mIsRunAnim;//是否执行动画    @NonNull    @Override    public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {        return null;    }    @Override    public int getItemCount() {        return 0;    }    @Override    public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {        holder.itemView.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                if (mIsRunAnim) {//点击item停止抖动动画                    mIsRunAnim = false;                    notifyDataSetChanged();                } else {                    ToastUtil.showToast(mList.get(holder.getBindingAdapterPosition()).getName());                }            }        });        holder.itemView.setOnLongClickListener(new View.OnLongClickListener() {            @Override            public boolean onLongClick(View v) {                if (!mIsRunAnim) {//执行动画                    Logs.i(TAG, "itemView-onLongClick");                    mIsRunAnim = true;                    notifyDataSetChanged();//刷新适配器                    return true;                }                return false;            }        });    }    //view依附窗口上时    @Override    public void onViewAttachedToWindow(@NonNull RecyclerView.ViewHolder holder) {        if (mIsRunAnim){        //仿桌面删除app 的抖动动画           RotateAnimation animation = new RotateAnimation(-2, 2, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);           animation.setDuration(100);           animation.setRepeatMode(Animation.REVERSE);           animation.setRepeatCount(Animation.INFINITE);           animation.setInterpolator(new LinearInterpolator());           holder.itemView.startAnimation(animation);//itemView执行动画           //holder.ivIcon.startAnimation(animation);//执行子view动画        }        super.onViewAttachedToWindow(holder);    }    //view被移除时    @Override    public void onViewDetachedFromWindow(@NonNull RecyclerView.ViewHolder holder) {        if (holder.itemView.getAnimation() != null) {            holder.itemView.clearAnimation();//清除动画        }        super.onViewDetachedFromWindow(holder);    }}

2.拓展:长按拖动换位

        ItemTouchHelper itemTouchHelper = new ItemTouchHelper(new ItemTouchHelper.Callback() {            @Override            public boolean isLongPressDragEnabled() {//是否可以拖动                return gridAdapter.isRunAnim();            }            @Override            public int getMovementFlags(@NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder) {                Logs.i(TAG,"getMovementFlags");                // 上下左右都可以拖拽                int dragFlags = ItemTouchHelper.UP | ItemTouchHelper.DOWN | ItemTouchHelper.LEFT | ItemTouchHelper.RIGHT;                return makeMovementFlags(dragFlags, 0);            }            @Override            public boolean onMove(@NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder, @NonNull RecyclerView.ViewHolder target) {                // 获取当前item和目标item的位置                int fromPosition = viewHolder.getBindingAdapterPosition();                int toPosition = target.getBindingAdapterPosition();                Logs.i(TAG,"onMove=fromPos="+fromPosition+",toPos="+toPosition);                // 交换数据集中的位置                Collections.swap(list, fromPosition, toPosition);                // 通知适配器数据交换                gridAppListAdapter.notifyItemMoved(fromPosition, toPosition);                return true;            }            @Override            public void onSwiped(@NonNull RecyclerView.ViewHolder viewHolder, int direction) {            }        });        itemTouchHelper.attachToRecyclerView(reclclerView);        reclclerView.setLayoutManager(gridLayoutManager);        reclclerView.setAdapter(gridAdapter);
()

上一篇:揭秘Kimi下载秘籍,轻松获取,一键操作!

下一篇:哪里有免费服务器?