-1

我想爲片段過渡創建自定義動畫。動畫呈圓形,從特定尺寸增加其半徑直至等於窗口高度。我可以使用ScaleAnimation,但是我會失去可繪製的質量。有人有任何想法可以做到這一點。提前致謝。Android片段過渡自定義視圖

回答

0

好的。我會回答我自己的問題:)。要使用我的自定義過渡(一個增加其大小的彩色圓圈)對片段過渡進行動畫製作,我做了以下操作: - 創建一個自定義視圖,繪製一個圓並添加增加其半徑的可能性; - 將此視圖置於我的FragmentActivity xml layout; - 當目標按鈕被點擊並且片段應該改變時我調用ValueAnimator來改變圓的半徑;

最終代碼會是這個樣子:

public class MainScreenActivity extends AppCompatActivity { 

    private Button targetButton; 
    private CircleView circleView; 



    public void targetButtonClick(View view) { 
     AnimationHandler handler = new AnimationHandler(view.getX(),view.getY()); 
     handler.animate(); 
    } 

    private class AnimationHandler implements Animator.AnimatorListener, ValueAnimator.AnimatorUpdateListener { 
     private static final int TRANSITION_ANIM_DURATION = 500; 
     private final float centerX; 
     private final float centerY; 
     private ValueAnimator valueAnimator; 

     public AnimationHandler(float x, float y) { 
      this.centerX = x; 
      this.centerY = y; 
      init(); 
     } 

     private void init() { 
      Point point = new Point(); 
      getWindowManager().getDefaultDisplay().getSize(point); 
      valueAnimator = ValueAnimator.ofFloat(0, point.y); 
      valueAnimator.setDuration(TRANSITION_ANIM_DURATION); 
      valueAnimator.addUpdateListener(this); 
      valueAnimator.addListener(this); 
     } 

     @Override 
     public void onAnimationStart(Animator animation) { 

     } 

     @Override 
     public void onAnimationEnd(Animator animation) { 
     } 

     @Override 
     public void onAnimationCancel(Animator animation) { 

     } 

     @Override 
     public void onAnimationRepeat(Animator animation) { 

     } 

     @Override 
     public void onAnimationUpdate(ValueAnimator animation) { 
      circleView.setRadius((float) animation.getAnimatedValue()); 
     } 

     public void animate() { 
      circleView.setXCenter(centerX); 
      circleView.setYCenter(centerY); 
      int color = getResources().getColor(android.R.color.dark_red); 
      circleView.setStrokeWidth(getResources().getDimensionPixelSize(R.dimen.trans_circle_width)); 
      valueAnimator.start(); 
     } 
    } 
}