2017-04-07 39 views
1

我有一個特殊的動畫,用於填充我的RecyclerView的卡片。動畫效果很好(至少對於充氣)。我不想在最初的通貨膨脹之後使用這個動畫。換句話說,我不希望有任何滾動的動畫(或者在用戶填充足夠的卡片充滿用戶的屏幕之後用戶的任何動作)。我無法弄清楚如何獲取位置編號 - 或者 - 填充後關閉動畫 - 或者 - 以任何方式執行此操作。我的動畫在適配器中調用。這是我用來設置動畫的適配器代碼。回收站查看屏幕後停止動畫

public class TagAdapter extends RecyclerView.Adapter<TagAdapter.ViewHolder>{ 
private ArrayList<TagDataModel> dataSet; 
private Context context; 

public TagAdapter (ArrayList<TagDataModel> ds, Context ctx){ 
    this.dataSet =ds; 
    this.context =ctx; 
} 

class ViewHolder extends RecyclerView.ViewHolder { 
    TextView tv_tag; 
    ArrayList<TagDataModel> dataSet = new ArrayList<>(); 
    Context context; 
    CardView card; 

    ViewHolder(View itemView, Context ctx, ArrayList<TagDataModel> ds) { 
     super(itemView); 
     this.dataSet = ds; 
     this.context =ctx; 
     this.tv_tag = (TextView) itemView.findViewById(R.id.tv_cardTag); 
     this.card = (CardView) itemView.findViewById(R.id.card_view_tag); 
    } 
} 

@Override 
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType){ 
    View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.card_tag, parent, false); 
    ViewHolder viewHolder = new ViewHolder(view, context, dataSet); 
    return viewHolder; 
} 

@Override 
public void onBindViewHolder(final ViewHolder holder, @SuppressLint("RecyclerView") final int position) { 
    final int activePosition = context.getSharedPreferences("userPrefs", Context.MODE_PRIVATE).getInt("np_tag", 0); 
    TextView tv_tag = holder.tv_tag; 
    CardView card = holder.card; 
    tv_tag.setText(dataSet.get(position).getTag()); 

    }); 
    animate(holder.itemView, position); //animate only first page UPDATE 
} 

@Override 
public int getItemCount() { 
    return dataSet.size(); 
} 

private void animate(View view, final int pos) { 
    view.animate().cancel(); 
    view.setTranslationY(100); 
    view.setAlpha(0); 
    view.animate().alpha(1.0f).translationY(0).setDuration(300).setStartDelay(pos *100); 
} 

回答

0

從bindViewHolder和 使用習慣ItemAnimator刪除當前動畫,並覆蓋animateAdd方法。 你可以找到更多here

這應該給你想要的結果。

public class MyItemAnimator extends DefaultItemAnimator { 

@Override 
    public boolean animateAdd(ViewHolder viewHolder) { 
     animate(viewHolder.itemView); 
     return true; 
    } 

private void animate(View view) { 
    view.setTranslationY(100); 
    view.setAlpha(0); 
    view.animate().alpha(1.0f).translationY(0).setDuration(300); 
} 


} 

現在將這個項目的動畫設置爲您的recyclerview。

recyclerView.setItemAnimator(new MyItemAnimator());

試試這個:)

+0

我相信這個鏈接告訴我如何結束動畫。我可以這樣做,但我需要知道如何在通貨膨脹後結束動畫*。這對我來說是棘手的部分。 – seekingStillness

+0

它只會在通貨膨脹的時候動畫,而不是在那之後動畫。 –

+0

謝謝,我會試試! – seekingStillness

0

如果您使用此RecyclerView提供的Activity它的代碼將是有益的。無論如何,this answer將有助於您檢測您的RecyclerView是否已達到最後一項。
this answer將幫助您檢測您的佈局是否完全創建/充氣。

+0

我不想定位最後一項,我想定位RecyclerView *已經完成充氣*。這將是一個更小的數字。 – seekingStillness

+0

您的要求是當'RecyclerView'開始創建/膨脹時開始動畫,並在完成時停止動畫。我對嗎? 爲了正確理解你目前在使用'RecyclerView'做什麼,你還必須提供代碼在哪裏使用這個rec​​yclerView(即你的'活動') –

+0

無論如何,[這個答案](http: //stackoverflow.com/a/31854673/2788613)可能仍然有幫助。這包含在佈局完全加載/膨脹時調用的偵聽器。 –