在Recyclerview中对视图进行动画处理

时间:2018-09-05 03:24:18

标签: android loops android-recyclerview android-animation adapter

我正在对RecyclerView设置动画,并且一切正常,除了RecyclerView内部的视图无法正确显示。

使用通用动画XML

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:anim/linear_interpolator">
<translate
    android:fromXDelta="-100%p"
    android:toXDelta="0"
    android:repeatCount="infinite"
    android:duration="3000"/>

//IS WORKING FINE, MOVES RECYCLERVIEW ACROSS SCREEN !

Recyclerview的代码

Animation animLinear;

//OnCreate
recyclerView = findViewById(R.id.item_list);    
recyclerView.setLayoutManager(new LinearLayoutManager(this, LinearLayoutManager.HORIZONTAL, true));
recyclerView.setAdapter(new Adapter_Main_Markets());
recyclerView.startAnimation(animLinear);

因此,正在发生的事情是recylerview的可见视图在屏幕上移动。我希望在RecyclerView上的屏幕内移动视图时有所帮助,但是我不知道如何正确地在Recyclerview内获取视图。

//Adapter Main Markets
@Override
public void onBindViewHolder(@NonNull Adapter_Main_Markets.MyViewHolder holder, int position) {
    holder.mIdView.setText("" + market_list[position]);
    holder.mPriceView.setText("$ " + int_list[position]);
    holder.mChangeView.setText(change_list[position]);

}

我是否需要循环查看适配器中的视图?也许在那里设置动画?任何帮助将不胜感激。

这是RecyclerView

项目A项目B项目C项目D项目E。

屏幕上可见区域中实际显示的是 项目A项目B项目C。

因此,当然,可见的“ Item A Item B Item C”穿过了屏幕,但这不是我想要的。

我希望项目A穿过屏幕,然后项目B穿过项目C,然后穿过D,然后到达E。

1 个答案:

答案 0 :(得分:2)

如果要在animateRecyclerView个视图,则需要像这样在itemview构造函数内对ViewHolder进行动画处理,

class `Your view holder class` extends RecyclerView.ViewHolder {

    `Constructor of your class`(View view) {
        super(view);
        //This piece of code will animate your itemview inside recyclerview
        new Handler().postDelayed(() -> {
            view.setVisibility(View.VISIBLE);
            view.startAnimation(AnimationUtils.loadAnimation(view.getContext(), android.R.anim.fade_in // Change your anim file here));
        }, 100);
        setIsRecyclable(true);// Just to ensure that everytime view gets invisible, it should be recycled for next time recreation.
    }
}
  

下一步是从您的 anim.xml

中删除重复计数      

删除 android:repeatCount="infinite" ,以便该视图   仅在可见时进行动画处理。

相关问题