Android-实现背景渐变动画

时间:2022-04-24 23:20:20

原文:http://thetechnocafe.com/make-a-moving-gradient-background-in-android/

这是一篇关于如何实现渐变动画背景的简易教程。

要实现这种效果,我们需要的是AnimationList.

首先我们需要创建五个渐变的Drawable资源文件,如下:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">


<gradient
android:angle="225"
android:endColor="#1a2980"
android:startColor="#26d0ce" />


</shape>
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">

<gradient
android:endColor="#614385"
android:startColor="#516395"
android:angle="45"/>


</shape>
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">

<gradient
android:endColor="#1d2b64"
android:startColor="#f8cdda"
android:angle="135"/>


</shape>
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">

<gradient
android:endColor="#ff512f"
android:startColor="#dd2476"
android:angle="45"/>


</shape>
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">

<gradient
android:angle="135"
android:endColor="#34e89e"
android:startColor="#0f3443" />


</shape>

现在我们可以在一个新的drawable文件中通过AnimationList结合上面的颜色渐变资源文件,实现背景色的变化效果。在AnimationList的标签里,通过item标签来指向gradient渐变资源。

<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android">

<item
android:drawable="@drawable/gradient_blue"
android:duration="5000"/>


<item
android:drawable="@drawable/gradient_red"
android:duration="5000"/>


<item
android:drawable="@drawable/gradient_teal"
android:duration="5000"/>


<item
android:drawable="@drawable/gradient_purple"
android:duration="5000"/>


<item
android:drawable="@drawable/gradient_indigo"
android:duration="5000"/>


</animation-list>

现在我们就可以把这个背景文件设置为Activity中View/ViewGroup的背景,来实现我们想要的渐变效果。

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/linear_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/gradient_animation_list"
android:orientation="vertical>

<!--Content goes here-->

</LinearLayout>

最后我们需要做的就是在java代码中调用AnimationList的start()方法。

LinearLayout linearLayout = (LinearLayout) findViewById(R.id.linear_layout);

AnimationDrawable animationDrawable = (AnimationDrawable) linearLayout.getBackground();

animationDrawable.setEnterFadeDuration(2500);
animationDrawable.setExitFadeDuration(5000);

animationDrawable.start();

如上,我们为LinearLayout设置了AnimationList资源,然后通过AnimationDrawable实例化动画背景,同时设置了每一个渐变背景的进入和结束动画时间。

你可以自己调节每个片段动画的进入和结束时间,来实现最佳效果。同时,你也可以自己添加更多的渐变效果,这里提供一个渐变颜色组合的工具网站:https://uigradients.com/#Jaipur

Android-实现背景渐变动画