Я хочу создать пользовательскую анимацию для перехода фрагмента. Анимация представляет собой круг, который увеличивает его радиус от определенного размера до тех пор, пока он не будет равен высоте окна. Я могу использовать ScaleAnimation, но тогда я потеряю привлекательное качество. У кого-то есть идеи, чтобы сделать это. Заранее спасибо.Пользовательский вид перехода фрагмента Android
-1
A
ответ
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();
}
}
}