Java 在Android中结束ScaleAnimation时,将LayoutView设置为圆形?
我正在视图中创建动画。用户单击按钮后,该按钮变为圆形。我正在使用缩放动画来存档这个。但是我的视图布局半径在单击按钮后会发生变化。如何在动画过程中保持相同的半径,或者在没有库的情况下,它们是如何实现这一点的? 查看xmlJava 在Android中结束ScaleAnimation时,将LayoutView设置为圆形?,java,android,animation,Java,Android,Animation,我正在视图中创建动画。用户单击按钮后,该按钮变为圆形。我正在使用缩放动画来存档这个。但是我的视图布局半径在单击按钮后会发生变化。如何在动画过程中保持相同的半径,或者在没有库的情况下,它们是如何实现这一点的? 查看xml ScaleAnimation类没有该属性。所以我使用了ValueAnimator类来激活它动画时间是一个整数。你想放弃吗 ValueAnimator anim = ValueAnimator.ofInt(view.getMeasuredWidth(), view.getMea
ScaleAnimation
类没有该属性。所以我使用了ValueAnimator
类来激活它<代码>动画时间是一个整数。你想放弃吗
ValueAnimator anim = ValueAnimator.ofInt(view.getMeasuredWidth(), view.getMeasuredHeight());
anim.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator valueAnimator) {
int val = (Integer) valueAnimator.getAnimatedValue();
ViewGroup.LayoutParams layoutParams = view.getLayoutParams();
layoutParams.width = val;
view.requestLayout();
}
});
anim.setDuration(ANIMATION_TIME);
anim.start();
最好有两个视图,一个是按钮,另一个是圆形进度条。缩小按钮后,可以看到圆形进度条。看看这是否适合你。如果你想查看它,还有一些自定义视图可用,只需搜索
加载按钮和roid
。我试过了,但在启动动画之后。按钮的半径将改变。因此,挑战性的事情是在结束动画时保持视图的半径,无论如何,感谢您的关注。您是否尝试过使用MotionLayout
,因为它似乎是解决此问题的更好方法。我尝试了ValueAnimator来实现这一点
<?xml version="1.0" encoding="UTF-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<corners
android:pivotX="100%"
android:pivotY="100%"
android:radius="45dp"
/>
<padding
android:bottom="0dp"
android:left="0dp"
android:right="0dp"
android:top="0dp" />
<solid android:color="#677FFF" />
<!--<stroke-->
<!-- android:width="3dp"-->
<!-- android:color="#50A4D1" />-->
</shape>
public void scaleViewAnimation(View view) {
ScaleAnimation scaleAnimation = new ScaleAnimation(1f, 0, 1f, 1f, Animation.RESTART, 0.5f, Animation.RESTART, 0.5f);
scaleAnimation.setDuration(ANIMATION_FADE_DURATION);
scaleAnimation.setFillAfter(true);
view.startAnimation(scaleAnimation);
}
ValueAnimator anim = ValueAnimator.ofInt(view.getMeasuredWidth(), view.getMeasuredHeight());
anim.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator valueAnimator) {
int val = (Integer) valueAnimator.getAnimatedValue();
ViewGroup.LayoutParams layoutParams = view.getLayoutParams();
layoutParams.width = val;
view.requestLayout();
}
});
anim.setDuration(ANIMATION_TIME);
anim.start();