[android简单动画正在旧设备上跳过

问题描述 投票:0回答:1

我有一个RecyclerView,其中有多个TextViews和一个Button。该按钮将触发类似于以下gif的动画:

enter image description here

我通过创建RecyclerView.Adapter并像这样创建OnClickListener来做到这一点:

public class recyclerViewAdapter extends RecyclerView.Adapter<recyclerViewAdapter.ViewHolder> {
    private ArrayList<MyObject> objects;
    // constructor and other stuff ...

    public void setDefaultRequestBtnClickListener(View.OnClickListener defaultRequestBtnClickListener) {
        this.defaultRequestBtnClickListener = defaultRequestBtnClickListener;
    }

    @Override
    public void onBindViewHolder(@NonNull final ViewHolder holder, int position) {
        MyObject object = objects.get(position);

        if (object.getRequestBtnClickListener() != null) {
            holder.Btn.setOnClickListener(object.getRequestBtnClickListener());
        }else {
            holder.Btn.setOnClickListener(defaultRequestBtnClickListener);
        }
    }

    public class ViewHolder extends RecyclerView.ViewHolder{

        TextView value;
        TextView currentVal;
        TextView Btn;
        ConstraintLayout parent;

        public ViewHolder(@NonNull View itemView) {
            super(itemView);
            value = itemView.findViewById(R.id.totalPrice);
            currentVal = itemView.findViewById(R.id.checkBtn);
            Btn = itemView.findViewById(R.id.animateBtn);
            parent = itemView.findViewById(R.id.parent);
        }

        public void bind(final OnMyClickListener listener) {
            parent.setOnClickListener(new View.OnClickListener() {
                @Override public void onClick(View v) {
                    listener.onMyClick(v, getLayoutPosition());
                }
            });
        }

    }

     public interface OnMyClickListener{
        void onMyClick(View view, int position);

    }
}

这将在回收器视图中创建视图绑定器并将其绑定到TextView和按钮。目前,用户必须单击该元素才能激活Btn和动画。以下是启动适配器的片段:

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        final View rootView = inflater.inflate(R.layout.frag_object_layout, container, false);

        final RecyclerView recyclerView = rootView.findViewById(R.id.list);
        final ArrayList<MyObject> objects = MyObject.getTestingList();
        final recyclerViewAdapter adapter =  new recyclerViewAdapter(objects, getContext());
        recyclerView.setAdapter(adapter);
        recyclerView.setLayoutManager(new LinearLayoutManager(getContext()));

        adapter.setDefaultRequestBtnClickListener(new View.OnClickListener(){

            @Override
            public void onClick(View view) {
                recyclerViewAdapter.ViewHolder holder = (recyclerViewAdapter.ViewHolder) recyclerView.findViewHolderForAdapterPosition(Position);

                if (holder != null) {
                    if (holder.value.getAlpha() == 0.0f) {
                        holder.value.animate().alpha(1.0f).setDuration(500);
                        holder.value.animate().translationY(-38).setDuration(1000);
                        holder.checkValue.animate().translationY(38).setDuration(1000);
                    } else {
                        holder.value.animate().alpha(0.0f).setDuration(500);
                        holder.value.animate().translationY(0).setDuration(500);
                        holder.checkValue.animate().translationY(0).setDuration(500);
                    }
                }
            }
        });

        adapter.setOnMyClickListener(new recyclerViewAdapter.OnMyClickListener() {
            @Override
            public void onMyClick(View view, int pos) {
                Position = pos;
                holder = (recyclerViewAdapter.ViewHolder) recyclerView.findViewHolderForAdapterPosition(Position);

            }
        });


        return rootView;
    }
}

这在模拟器上都很好用,但是在较旧的设备上,动画正在跳过,视图直接移至最终位置。这是为什么?我检查了处理时间,它低于16ms阈值。

我该如何改善?

((在此处发布整个代码很困难。要求提供代码,我将更新问题)

android animation android-recyclerview android-viewholder
1个回答
0
投票

这里的问题是我正在以编程方式执行此操作。由于某些原因,如果我调用Animator对象并传递anim xml文件,则动画可以工作(在旧设备上)。有人知道为什么吗?

© www.soinside.com 2019 - 2024. All rights reserved.