相关文章推荐
逆袭的黄瓜  ·  引用 JSEncrypt ...·  1 年前    · 

使用自定义动画时,Recyclerview列表与快速滚动重叠 android

2 人关注

嗨,我有一个问题,当使用动画时, RecyclerView 列表重叠。

my RecyclerView adapter:

import android.content.Context;
import android.graphics.Color;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import java.util.Collections;
import java.util.List;
public class RecyclerViewAdapter extends RecyclerView.Adapter<ViewHolder> {
        List<Data> list = Collections.emptyList();
        Context context;
        public RecyclerViewAdapter(List<Data> list, Context context) {
            this.list = list;
            this.context = context;
        @Override
        public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
            //Inflate the layout, initialize the View Holder
            View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.apps_layout, parent, false);
            ViewHolder holder = new ViewHolder(v);
            return holder;
        @Override
        public void onBindViewHolder(ViewHolder holder, int position) {
            //Use the provided View Holder on the onCreateViewHolder method to populate the current row on the RecyclerView
            holder.title.setText(list.get(position).title);
            holder.description.setText(list.get(position).description);
            holder.imageView.setImageResource(list.get(position).imageId);
            animate(holder); ///////////////// i am animating here
    public void animate(RecyclerView.ViewHolder viewHolder) {
        Animation animAnticipateOvershoot = AnimationUtils.loadAnimation(context, R.anim.slidein);
        viewHolder.itemView.setAnimation(animAnticipateOvershoot);
        @Override
        public int getItemCount() {
            //returns the number of elements the RecyclerView will display
            return list.size();
        @Override
        public void onAttachedToRecyclerView(RecyclerView recyclerView) {
            super.onAttachedToRecyclerView(recyclerView);
        // Insert a new item to the RecyclerView on a predefined position
        public void insert(int position, Data data) {
            list.add(position, data);
            notifyItemInserted(position);
        // Remove a RecyclerView item containing a specified Data object
        public void remove(Data data) {
            int position = list.indexOf(data);
            list.remove(position);
            notifyItemRemoved(position);

viewholder.java。

import android.support.v7.widget.CardView;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;
public class ViewHolder  extends RecyclerView.ViewHolder {
        CardView cv;
        TextView title;
        TextView description;
        ImageView imageView;
        TextView inststatus;
        ViewHolder(View itemView) {
            super(itemView);
            cv = (CardView) itemView.findViewById(R.id.cardViewapp);
            title = (TextView) itemView.findViewById(R.id.titleapp);
            description = (TextView) itemView.findViewById(R.id.descriptionapp);
            imageView = (ImageView) itemView.findViewById(R.id.imageViewapp);

用这种方式

 RecyclerView recyclerView = (RecyclerView) findViewById(R.id.recyclerview);
        recyclerView.setLayoutManager(new LinearLayoutManager(this));
        RecyclerViewAdapter adapter = new RecyclerViewAdapter(data, getApplication());
        recyclerView.setAdapter(adapter);
        recyclerView.setNestedScrollingEnabled(false);