如何在LinearLayout中将动画加载为背景?

时间:2019-07-17 17:04:51

标签: android android-layout android-animation drawable

我正在尝试为Android Studio中的LinearLayout加载我自己的动画之一(例如gif)作为背景。我知道,如果它是正常图像,我可以将其放在可绘制文件夹中,然后执行以下操作:

Select distinct 
    c.id_penjualan,
    d.nama_transaksi_pengeluaran, e.nama_pelanggan,
    f.no_kombinasi, g.nama_produk, c.harga, c.jumlah,
    c.subtotal, c.no_voucher, c.no_polisi 
from 
    t.penjualan_h a 
inner join 
    spbu142071163.t.penjualan_d b on a.no_penjualan = b.no_penjualan 
inner join 
    spbu142071163.t.penjualan_d2 c on b.no_penjualan = c.no_penjualan 
inner join 
    spbu142071163.m.tipe_transaksi_pengeluaran d on b.kode_tipe_transaksi_pengeluaran = d.kode_tipe_transaksi_pengeluaran 
inner join  
    m.pelanggan e on b.kode_pelanggan = e.kode_pelanggan 
inner join 
    m.kombinasi f on c.no_kombinasi = f.no_kombinasi 
inner join 
    m.produk g on f.kode_produk = g.kode_produk 
where 
    a.no_penjualan = 'PNJLN190717.001' 
    and a.no_penjualan = c.no_penjualan 
    and c.kode_pelanggan = e.kode_pelanggan

但是对于gif这样的动画,我该怎么做呢?

LinearLayout只是普通的LinearLayout。

android:background="@drawable/image"

2 个答案:

答案 0 :(得分:2)

我使用以下方法在应用程序中制作动画。可以有许多其他方式。我已经做到了...

在xml中执行此操作。

<RelativeLayout
android:id="@+id/gradient_rl"        
android:layout_width="match_parent"        
android:layout_height="match_parent"
android:background="@drawable/profile_gradient4">

<!-- place your child views here-->

<Relativelayout/>

在drawable中进行xml布局。

profile_gradient4.xml

<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android">
<item
    android:drawable="@drawable/profile_gradient1"
    android:duration="7500"/>
<item
    android:drawable="@drawable/profile_gradient2"
    android:duration="7500"/>
<item
    android:drawable="@drawable/profile_gradient3"
    android:duration="7500"/>
</animation-list>

您可以从此处-> My app which runs a smooth animation in background获取profile_gradient1、2、3的代码。 这些xml存在于drawable文件夹中。您甚至可以使用普通图像代替这3个xml布局。

在活动范围内的Java代码中:

private void runGradient() {
    //method is used to give gradient color animation to the bottom of profile screen
    RelativeLayout relativeLayout = findViewById(R.id.gradient_rl);
    AnimationDrawable animationDrawable = (AnimationDrawable) relativeLayout.getBackground();
    animationDrawable.setEnterFadeDuration(5000);
    animationDrawable.setExitFadeDuration(7500);
    animationDrawable.start();
}

我在上面做什么?

  1. 我所做的相对布局将具有我的子视图的背景。

  2. 在profile_gradient4.xml中,我制作了一个动画列表,其中包含3个其他可绘制对象。它们是profile_gradient1、2和3。

  3. 然后在活动中,我使用AnimatonDrawable获取了动画列表,提供了淡入淡出动画的时间并开始了profile_gradient1、2和3的动画。

您可以通过上面的GitHub链接使用和运行我的应用。

编辑:其他建议方法->

如果您希望将gif动画作为背景,这篇文章可能会对您有所帮助-> adding-gif-image-in-an-imageview-in-android

您还可以使用诸如glide之类的某些库来显示gif。使该gif视图跨越其父视图的大小,然后在该gif视图上方绘制其他子视图。

答案 1 :(得分:0)

在文件夹可绘制中创建背景框架和动画列表。

示例(动画列表)background_animation

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

    <item
        android:drawable="@drawable/background_animation_0"
        android:duration="250"/>
    <item
        android:drawable="@drawable/background_animation_1"
        android:duration="250"/>
    <item
        android:drawable="@drawable/background_animation_2"
        android:duration="250"/>
    <item
        android:drawable="@drawable/background_animation_3"
        android:duration="250"/>

</animation-list>

示例(框架)background_animation_0

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

    <gradient
        android:startColor="@color/colorAnimationBlue"
        android:centerColor="@color/colorAnimationBlue"
        android:endColor="@color/colorAnimationPink"
        android:angle="270"/>

</shape>

将此添加到您的布局:

android:background="@drawable/background_animation"

将此添加到您的活动中:

LinearLayout layout = findViewById(R.id.Layout);

BackgroundAnimation backgroundAnimation = (AnimationDrawable) layout.getBackground();
backgroundAnimation.setEnterFadeDuration(3700);
backgroundAnimation.setExitFadeDuration(3700);
backgroundAnimation.start();