2016-12-20 5 views
2

グリッドレイアウトマネージャでrecyclerviewを作成しました。画像のサムネイルをクリックすると、クリックされたサムのアニメーションを含むビューページャを持つDialogfragmentの画像がフルスクリーンに展開されます。イメージアイテム上でDialogfragment dynamicアニメーションが増加する

私は別の解決法を試しましたが、うまくいきませんでした。スタイルから直接適用されたアニメーション、しかし動的ランタイムアニメーションを定義する方法。

私は以下を試しましたが、正確には動作しませんでした。

どのようにこのことを達成するためのアイデア?

MediaFragment.java

@Override 
public void onItemClick(View v, int position) { 
    switch (v.getId()) { 
     case R.id.llItemContainer: 
      Bundle bundle = new Bundle(); 
      bundle.putInt(Constant.KEY_CURRENT_ITEM, position); 
      dialogMediaProfileFragment = new DialogMediaProfileFragment(); 
      dialogMediaProfileFragment.setArguments(bundle); 
      dialogMediaProfileFragment.show(getFragmentManager(), TAG); 
      zoomImageFromThumb(v).start(); 
      break; 
    } 
} 

private Animator zoomImageFromThumb(final View thumbView) { 

    if (mCurrentAnimator != null) { 
     mCurrentAnimator.cancel(); 
    } 

    startBounds = new Rect(); 
    finalBounds = new Rect(); 
    Point globalOffset = new Point(); 

    thumbView.getGlobalVisibleRect(startBounds); 
    rvMediaPost.getGlobalVisibleRect(finalBounds, globalOffset); 
    startBounds.offset(-globalOffset.x, -globalOffset.y); 
    finalBounds.offset(-globalOffset.x, -globalOffset.y); 

    if ((float) finalBounds.width()/finalBounds.height() > (float) startBounds 
      .width()/startBounds.height()) { 
     // Extend start bounds horizontally 
     startScale = (float) startBounds.height()/finalBounds.height(); 
     float startWidth = startScale * finalBounds.width(); 
     float deltaWidth = (startWidth - startBounds.width())/2; 
     startBounds.left -= deltaWidth; 
     startBounds.right += deltaWidth; 
    } else { 
     // Extend start bounds vertically 
     startScale = (float) startBounds.width()/finalBounds.width(); 
     float startHeight = startScale * finalBounds.height(); 
     float deltaHeight = (startHeight - startBounds.height())/2; 
     startBounds.top -= deltaHeight; 
     startBounds.bottom += deltaHeight; 
    } 
    setAlpha(thumbView, 1f); 
    //This shows the nullpointer exception 

    /*setPivotX(dialogMediaProfileFragment.getView(), 0f); 
    setPivotY(dialogMediaProfileFragment.getView(), 0f);*/ 

    AnimatorSet set = new AnimatorSet(); 
    set.play(
      ObjectAnimator.ofFloat(dialogMediaProfileFragment, "translationX", 
        startBounds.left, finalBounds.left)) 
      .with(ObjectAnimator.ofFloat(dialogMediaProfileFragment, "translationY", 
        startBounds.top, finalBounds.top)) 
      .with(ObjectAnimator.ofFloat(dialogMediaProfileFragment, "scaleX", 
        startScale, 1f)) 
      .with(ObjectAnimator.ofFloat(dialogMediaProfileFragment, "scaleY", 
        startScale, 1f)); 
    set.setDuration(mShortAnimationDuration); 
    set.setInterpolator(new DecelerateInterpolator()); 
    set.addListener(new AnimatorListenerAdapter() { 
     @Override 
     public void onAnimationEnd(Animator animation) { 
      mCurrentAnimator = null; 
     } 

     @Override 
     public void onAnimationCancel(Animator animation) { 
      mCurrentAnimator = null; 
     } 
    }); 
    return mCurrentAnimator = set; 

} 

private void setAlpha(View view, float alpha) { 
    view.setAlpha(alpha); 
} 

private void setPivotX(View view, float x) { 
    view.setPivotX(x); 
} 

private void setPivotY(View view, float y) { 
    view.setPivotY(y); 
} 

答えて

関連する問題