【发布时间】:2015-07-13 18:23:33
【问题描述】:
我想为片段过渡创建自定义动画。动画是一个圆的形式,将他的半径从一个特定的大小增加到等于窗口的高度。我可以使用 ScaleAnimation,但是我会失去可绘制的质量。有人有什么想法吗?提前致谢。
【问题讨论】:
标签: android android-fragments android-animation android-custom-view
我想为片段过渡创建自定义动画。动画是一个圆的形式,将他的半径从一个特定的大小增加到等于窗口的高度。我可以使用 ScaleAnimation,但是我会失去可绘制的质量。有人有什么想法吗?提前致谢。
【问题讨论】:
标签: android android-fragments android-animation android-custom-view
好的。我会回答我自己的问题:)。为了使用我的自定义过渡(增加他的大小的彩色圆圈)为片段过渡设置动画,我做了以下操作: - 创建一个绘制圆的自定义视图并添加增加其半径的可能性; - 将此视图放在我的 FragmentActivity xml 布局中; - 当目标按钮被点击并且片段应该改变时,我调用了 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();
}
}
}
【讨论】: