-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(); 
     } 
    } 
}