リサイクラのビュー項目を追加しているときにアニメーション化したいと考えています。スクロールしたり、アイテムを追加したりした後ではありません。私が模倣しようとしている動作は、FloatingActionMenuがあり、そのメニューにFloatingActionButtonsを追加したときと似ています。メニューが開き、項目が1つずつ表示されます。この動作をどうすれば達成できますか?私は、より複雑なビューを膨らませたいので、FloatingActionMenuまたはFloatingActionButtonsを使用していません。あなたが見ることができるように、これらのメニューは、私がonBindViewHolderにアニメーションを追加しようとしている リサイクラビューでフローティングアクションボタンのメニュービヘイビアを作成する方法は?
を制限されているが、これは遅すぎます。アイテムはすべて同時に追加され、アニメーションはすべて順番にではなく同時に発生します。考えられる唯一のアイデアは、アダプターにアイテムを1つずつ追加し、notifyDataSetの変更を利用することでしたが、より良いアプローチがあるかどうかを確認するためにコミュニティの脳を選びたかったのです。ここに私のアダプタは、私が試してみましたいくつかの他のものはLinearLayoutManager layoutManager = new LinearLayoutManager(this);
layoutManager.setReverseLayout(true);
layoutManager.setStackFromEnd(true);
rv.setLayoutManager(layoutManager);
mAdapter = new MyAdapter(mContext, mContent);
rv.setAdapter(mAdapter);
これは私が私のアダプタにデータを初期化して送信しています方法です
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> {
private final static int FADE_DURATION = 10000; // in milliseconds
private Context mContext;
private String[] mContent;
public MyAdapter(Context context, String[] content) {
mContext = context;
mContent = content;
}
@Override
public MyAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
return new ViewHolder(LayoutInflater.from(mContext).inflate(R.layout.items, parent, false));
}
@Override
public void onBindViewHolder(MyAdapter.ViewHolder holder, int position) {
holder.tvText.setText(mContent[position]);
// Set the view to fade in
setScaleAnimation(holder.itemView);
}
@Override
public int getItemCount() {
return mContent.length;
}
private void setFadeAnimation(View view) {
AlphaAnimation anim = new AlphaAnimation(0.0f, 1.0f);
anim.setDuration(FADE_DURATION);
view.startAnimation(anim);
}
private void setScaleAnimation(View view) {
ScaleAnimation anim = new ScaleAnimation(0.0f, 1.0f, 0.0f, 1.0f,
Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);
anim.setDuration(FADE_DURATION);
view.startAnimation(anim);
}
public class ViewHolder extends RecyclerView.ViewHolder {
private TextView tvText;
public ViewHolder(View itemView) {
super(itemView);
tvText = (TextView) itemView.findViewById(R.id.tv_text);
}
}
}
でそれらが追加された項目のタイミングを制御することです。私はsetItemAnimatorを使って試してみて、アイテムのaddDurationを設定しました。これのどれも期待どおりに動作しません。
LinearLayoutManager layoutManager = new LinearLayoutManager(this);
layoutManager.setReverseLayout(true);
layoutManager.setStackFromEnd(true);
rv.setLayoutManager(layoutManager);
mAdapter = new MyAdapter(mContext, mContent);
DefaultItemAnimator animation = new DefaultItemAnimator();
animation.setAddDuration(100000); // << this attribute seems to make no difference
rvItems.setItemAnimator(animation);
rv.setAdapter(mAdapter);
おそらく、[ 'ItemAnimator'](https://developer.android.com/reference/android/support/v7/widget/RecyclerView.ItemAnimator.html)を作成します。最初から起動する必要はありません。そのページにリストされている既存のサブクラスの1つを拡張するだけで十分です。 – Karakuri
@Karakuri itemAnimatorはスクロール可能なアイテムでのみ動作するようです。だから私がスクロールすると、最初の項目で行われるアニメーションがスクロール時に追加されました。アイテムを追加してバインドする前にアイテムを傍受する必要があります。 – portfoliobuilder
「スクロール可能な」アイテムが何を意味するのか分かりません。ドキュメントは、アイテムの追加、移動、変更、および削除をアニメートできることを示唆しています。 – Karakuri