在Android中製作移動的漸變背景

weixin_33751566發表於2017-04-10

原文地址:http://thetechnocafe.com/make-a-moving-gradient-background-in-android/
這是一個關於如何在Android上製作移動漸變背景的快速教程。
為了實現這個,我們需要使用AnimationList,現在讓我們開始吧。

首先我們需要建立5個漸變的drawables,如下所示:

<?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"
    android:shape="rectangle">
  <gradient
        android:angle="45"
        android:endColor="#614385"
        android:startColor="#516395"/>
</shape>
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
  <gradient
        android:angle="135"
        android:endColor="#1d2b64"
        android:startColor="#f8cdda"/>
</shape>
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
  <gradient
        android:angle="45"
        android:endColor="#ff512f"
        android:startColor="#dd2476"/>
</shape>
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
  <gradient
        android:angle="135"
        android:endColor="#34e89e"
        android:startColor="#0f3443"/>
</shape>

然後再一個新的xml drawable檔案中新增如下程式碼,包含一個AnimationList用來改變background從一個漸變到另一個漸變,在AnimationList標籤中,新增5個item。

<?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設定一個id,我們需要在java程式碼中引用他。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  xmlns:app="http://schemas.android.com/tools"
  android:id="@+id/match_parent"
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  android:background="@drawable/gradient_animation_list"
  android:orientation="vertical">

  <!--Content goes here-->
</LinearLayout>

現在我們需要做的就是在java程式碼中告訴animation list開啟動畫,我們可以呼叫AnimationDrawable.start()方法,程式碼如下:

LinearLayout linearLayout = (LinearLayout)findViewById(R.id.linear_layout);
AnimationDrawable animationDrawable = (AnimationDrawable)linearLayout.getBackground();

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

可以看到,我們引用了將動畫列表作為背景的LinearLayout,然後我們從AnimationDrawable中獲取他的背景,然後我們設定進入和退出動畫的持續時間,並啟動它。

177857-65deac3e88b1ff27.png

相關文章