0

私はRecycleViewを持っています。そのアイテムは、クリックするとスケーリングとトランジションアニメーションを行います。 onBindViewHolder()で私は時々ポストアニメーション状態でviewsを取得し、私は元のレイアウト位置とサイズを保存することで、アニメーションがやったことをスケーリングと移行を元に戻すとviewHolderで現在のレイアウトにそれを設定しようとしている:onCreateViewHolderを展開するときに空のレイアウトを取得する

private void returnToOriginalSate(ItemViewHolder holder) { 
    View groupLogo1 = holder.parent.findViewById(R.id.group_logo1); 
    View groupLogo2 = holder.parent.findViewById(R.id.group_logo2); 
    View leagueLogo = holder.parent.findViewById(R.id.league_logo_parent); 

    groupLogo1.setX(originalLayout.findViewById(R.id.group_logo1).getX()); 
    groupLogo1.setY(originalLayout.findViewById(R.id.group_logo1).getY()); 
    groupLogo1.setLayoutParams(originalLayout.findViewById(R.id.group_logo1).getLayoutParams()); 

    groupLogo2.setX(originalLayout.findViewById(R.id.group_logo2).getX()); 
    groupLogo2.setY(originalLayout.findViewById(R.id.group_logo2).getY()); 
    groupLogo2.setLayoutParams(originalLayout.findViewById(R.id.group_logo2).getLayoutParams()); 

    leagueLogo.setX(originalLayout.findViewById(R.id.league_logo_parent).getX()); 
    leagueLogo.setY(originalLayout.findViewById(R.id.league_logo_parent).getY()); 
    leagueLogo.setLayoutParams(originalLayout.findViewById(R.id.league_logo_parent).getLayoutParams()); 
} 
-1と、X、Y:

originalLayoutが、私はそれを膨らませるとonCreateViewHolder

@Override 
public ItemViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
    ItemViewHolder viewHolder = new ItemViewHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.item_in_feed, parent, false)); 
    if(originalLayout == null){ 
     originalLayout = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_in_feed, parent, false); 

    } 
    return viewHolder; 
} 

問題でそれを保存しています取得するには、私は、たとえば、このレイアウトのImageViewのはLayoutParamsを持っている、奇妙なoriginalLayout値を得ることですポジション:(0,0)

なぜですか?実際のオリジナルのレイアウトをどのように取得すればよいのですか?

編集:私はアニメーションが終了したら、コメントで私たちの話はホルダービューのアニメーターに逆に()適用については、リサイクルビュー

@Override 
public void onBindViewHolder(final ItemViewHolder holder, final int position) { 
     if(this view is recycled and should be reset){ 
      returnToOriginalState(holder); 

    } 
} 
+0

onCreateViewHolderデータリストの設定後に一度呼び出されます。おそらく一度それを膨張させ、viewHolderのビューを使ってアニメーションを適用する必要があります。 –

+0

originalLayoutは、トランジションとスケーリング(元のビューの位置を持つonCreateViewHolderの元のレイアウト(item_in_feed))を変更せずにrecycleView内のアイテムがどのように表示されるかを示します。 – ben

+0

Ok。わかった。 holder.mView.setOnClickListener(...)を追加し、ホルダービューをメソッドに渡し、実際にアニメーター/アニメーションを適用する必要があります。どのようなアニメーションが必要ですか? –

答えて

0

の位置をリセットしたときにこれがonbindviewです:

animator.addListener(new AnimatorListenerAdapter() { 
    @Override 
    public void onAnimationEnd(Animator animation) { 
     animation.removeListener(this); 
     animation.setDuration(0); 
     ((ValueAnimator) animation).reverse(); 
    } 
}); 
+0

これでビューがアニメーション化され、元の位置。私は望んでいない、私はonBindViewHolderの元の位置にビューを配置したい。 – ben

+0

あなたはアイテムの位置を変更していますか? –

関連する問題