Android 同心圆缩放动画
Android concentric circles scale animation
我正在尝试创建一个动画,其中两个同心圆(以中心点为中心)上下缩放。
如果我将动画设置为两个圆圈中的任何一个,它会在其中心正确缩放,但如果我将动画设置为两个圆圈,则轴心是错误的。
这是截图:
这是我的布局:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<RelativeLayout
android:id="@+id/soundCircle"
android:layout_width="230dp"
android:layout_height="230dp"
android:layout_gravity="center">
<View
android:id="@+id/soundRipple2"
android:layout_width="230dp"
android:layout_height="230dp"
android:background="@drawable/circle"
android:alpha="0.08"
android:layout_centerInParent="true"/>
<View
android:id="@+id/soundRipple3"
android:layout_width="160dp"
android:layout_height="160dp"
android:background="@drawable/circle"
android:alpha="0.08"
android:layout_centerInParent="true"/>
</RelativeLayout>
</LinearLayout>
这是动画:
<?xml version="1.0" encoding="utf-8"?>
<scale xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="500"
android:fromXScale="1.0"
android:fromYScale="1.0"
android:interpolator="@android:anim/accelerate_decelerate_interpolator"
android:toXScale="0.7"
android:toYScale="0.7"
android:pivotX="50%"
android:pivotY="50%"
android:repeatMode="reverse"
android:fillAfter="true"
android:repeatCount="infinite"/>
这可能是同一动画的两个实例共享轴心点造成的。在我玩了一会儿之后,我发现如果你将不同的动画实例分配给 View
s.
这是我用过的代码:
Animation pulse = AnimationUtils.loadAnimation(this, R.anim.pulse);
Animation pulse2 = AnimationUtils.loadAnimation(this, R.anim.pulse);
circle1.startAnimation(pulse);
circle2.startAnimation(pulse2);
我试过这个动画,效果很好。在浏览了一些网站和 git 存储库之后。我找到了一个最佳解决方案,也许它也会对您有所帮助。您不需要为该动画添加多个视图。只去过一次,相信你也喜欢这样的效果。
https://github.com/skyfishjy/android-ripple-background
我正在尝试创建一个动画,其中两个同心圆(以中心点为中心)上下缩放。
如果我将动画设置为两个圆圈中的任何一个,它会在其中心正确缩放,但如果我将动画设置为两个圆圈,则轴心是错误的。
这是截图:
这是我的布局:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<RelativeLayout
android:id="@+id/soundCircle"
android:layout_width="230dp"
android:layout_height="230dp"
android:layout_gravity="center">
<View
android:id="@+id/soundRipple2"
android:layout_width="230dp"
android:layout_height="230dp"
android:background="@drawable/circle"
android:alpha="0.08"
android:layout_centerInParent="true"/>
<View
android:id="@+id/soundRipple3"
android:layout_width="160dp"
android:layout_height="160dp"
android:background="@drawable/circle"
android:alpha="0.08"
android:layout_centerInParent="true"/>
</RelativeLayout>
</LinearLayout>
这是动画:
<?xml version="1.0" encoding="utf-8"?>
<scale xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="500"
android:fromXScale="1.0"
android:fromYScale="1.0"
android:interpolator="@android:anim/accelerate_decelerate_interpolator"
android:toXScale="0.7"
android:toYScale="0.7"
android:pivotX="50%"
android:pivotY="50%"
android:repeatMode="reverse"
android:fillAfter="true"
android:repeatCount="infinite"/>
这可能是同一动画的两个实例共享轴心点造成的。在我玩了一会儿之后,我发现如果你将不同的动画实例分配给 View
s.
这是我用过的代码:
Animation pulse = AnimationUtils.loadAnimation(this, R.anim.pulse);
Animation pulse2 = AnimationUtils.loadAnimation(this, R.anim.pulse);
circle1.startAnimation(pulse);
circle2.startAnimation(pulse2);
我试过这个动画,效果很好。在浏览了一些网站和 git 存储库之后。我找到了一个最佳解决方案,也许它也会对您有所帮助。您不需要为该动画添加多个视图。只去过一次,相信你也喜欢这样的效果。 https://github.com/skyfishjy/android-ripple-background