android - with - 안드로이드 카드 뷰 정렬




RecyclerView 내의 CardView:채우는 동안 애니메이션 (2)

CardView 레이아웃으로 채워진 재활용 뷰가 있습니다. 나는 많은 응용 프로그램에서이 응용 프로그램이 현재 응용 프로그램에서 수행하는 것처럼 갑자기 나타나지 않고 멋진 애니메이션 입구가 있다는 것을 알아 챘습니다. 내가 성취하려는 일의 예가 아래에 나와 있습니다.

swipeRefreshListener / adapter를 사용하여이 애니메이션을 어떻게 트리거합니까? 어댑터를 통해 어떻게 구현합니까?

참고 :이 애니메이션은 RecyclerView가 처음 CardView 항목으로 채워질 때 트리거되고, 포함 된 데이터도 필요합니다.

RecyclerView의 어댑터는 다음과 같습니다.

public class RecyclerAdapter extends RecyclerView.Adapter<RecyclerAdapter.ViewHolder> {

private String[] mDataset;
private String[] mClassDataset;
private int lastPosition = -1;
private Context context;

View view;


public static class ViewHolder extends RecyclerView.ViewHolder {

    public TextView mTextView;
    public TextView mClassDataView;
    CardView container;


    public ViewHolder(View itemView) {
        super(itemView);
        mTextView = (TextView)itemView.findViewById(R.id.grade);
        mClassDataView = (TextView)itemView.findViewById(R.id.class_name);
        container = (CardView)itemView.findViewById(R.id.card_view);
    }
}

public RecyclerAdapter(String[] myDataset, String[] classData, Context context) {
    mDataset = myDataset;
    mClassDataset = classData;
    this.context = context;

}

@Override
public RecyclerAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {

    View v = LayoutInflater.from(parent.getContext())
            .inflate(R.layout.card_item, parent, false);

    ViewHolder vh = new ViewHolder(v);

    view = v;

    return vh;
}

@Override
public int getItemCount() {
    return mClassDataset.length;
}

@Override
public void onBindViewHolder(final ViewHolder holder, final int position) {


    if (mDataset.length < mClassDataset.length) {

        holder.mTextView.setText("N/A");
        holder.mClassDataView.setText(mClassDataset[position]);

        if (mClassDataset[position].equals("N/A")) {

        }

    } else {
        holder.mTextView.setText(mDataset[position]);
        holder.mClassDataView.setText(mClassDataset[position]);
    }

    for (int i = 0; i < getItemCount(); i++) {

        animate(view, i);

    }
}

private void animate(final View view, final int position){

        Animation animation = AnimationUtils.loadAnimation(context, android.R.anim.slide_in_left);
        view.startAnimation(animation);
        lastPosition = position;

    }

}

애니메이션은 현재 작동하지만 항목은 한 번에 애니메이션으로 재생됩니다. 사용자 정의 getChild() 메소드를 작성하여 아이템을 반복적으로 시도했지만 작동하지 않았습니다. 어쨌든 각 자식에 개별적으로 액세스 / 애니메이션을 적용하고 각 애니메이션 사이에 지연을 설정해야합니다. 그러나, 나는 이것이 정확히 어떻게 성취 할 수 있는지 확신하지 못한다. 지연을 설정하기 위해 Handler를 사용할 수 있지만 각 자식에 액세스하는 것은 문제입니다.


RecyclerView의 경우이 메소드를 사용하여 ItemAnimators를 설정할 수 있습니다.

RecyclerView.setItemAnimator(RecyclerView.ItemAnimator animator)

이 ItemAnimator를 구현하는 라이브러리가 몇 개 있습니다 (예 : https://github.com/wasabeef/recyclerview-animators


먼저 애니메이션을 정의하십시오.

<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate android:fromXDelta="100%p" android:toXDelta="0"
    android:duration="300"/>
<alpha android:fromAlpha="0.0" android:toAlpha="1.0"
    android:duration="300" />
</set>

그런 다음 어댑터에 설정하십시오.

    @Override
public void onBindViewHolder(ViewHolder holder, int position)
{
    holder.text.setText(items.get(position));

    // Here you apply the animation when the view is bound
    setAnimation(holder.container, position);
}

/**
 * Here is the key method to apply the animation
 */
private void setAnimation(View viewToAnimate, int position)
{
    // If the bound view wasn't previously displayed on screen, it's animated
    if (position > lastPosition)
    {




 Animation animation = AnimationUtils.loadAnimation(context, android.R.anim.push_left_in);
        viewToAnimate.startAnimation(animation);
        lastPosition = position;
    }
}

참조 : RecyclerView : 삽입 애니메이션 효과를 만드는 방법은 무엇입니까?





android-layout