android - 在旧设备上跳过简单的动画
问题描述
我有一个带有多个 TextView 和一个按钮的 RecyclerView。该按钮触发如下 gif 动画:
我通过创建一个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);
}
}
viewholder
这将创建 a in a并将其绑定recyclerview
到TextViews
and 按钮。目前,用户必须单击元素才能激活Btn
动画。以下是Fragment
正在启动适配器的内容:
@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;
}
}
这在模拟器上运行良好,但在较旧的设备上,动画正在跳过并且视图直接转到它们的最终位置。这是为什么?我检查了处理时间,它低于 16 毫秒的阈值。
我该如何改进呢?
(在这里发布整个代码很困难。要求代码,我会更新问题)
解决方案
推荐阅读
- azure - 在 Visual Studio 2017 中使用 Azure Function V1 ServiceBusTrigger 时无法从 Run 函数返回值
- c# - 我无法更改 FPSController 的位置
- azure-data-factory - Azure 数据工厂:在下一个活动的复制数据活动中使用 Rest 的输出
- reactjs - 用玩笑单元测试材料 ui 组件
- html - 无法创建二进制 JPEG 的 Base64 表示
- r - 如何拆分列中的行以获得时间序列
- c# - 如何从像编号 TOC 这样的 html 字符串中仅提取标题(即 h2、h3、h4)?
- javascript - 在 mongdb 填充对象数组中查找值 - lodash
- php - 如何使用右连接和 MYSQL 案例获取两列的数据
- google-maps - 查找街道的起点和终点节点