有没有办法在图层列表定义中动画(旋转)我的应用程序项?

时间:2016-07-12 17:13:53

标签: android android-drawable

目前我有以下drawable(splash.xml)定义:

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

    <item
        android:drawable="@color/grey_300"/>

    <item>
        <bitmap
            android:gravity="center"
            android:src="@mipmap/ic_launcher"/>
    </item>

</layer-list>

我通过如下定义活动将其用于启动画面:

    <activity
        android:name=".SplashActivity"
        android:label="@string/app_name"
        android:theme="@style/SplashTheme">
        <intent-filter>
            <action android:name="android.intent.action.MAIN"/>
            <category android:name="android.intent.category.LAUNCHER"/>
        </intent-filter>
    </activity>

该风格来自styles.xml

<style name="SplashTheme" parent="Theme.AppCompat.NoActionBar">
    <item name="android:windowBackground">@drawable/splash</item>
</style>

,我想知道我是否可以在屏幕上居中显示徽标的动画(可能会旋转它)。达到目标的最佳途径是什么?我已经尝试在animated-rotate元素内部使用item,但直到现在都没有成功。

2 个答案:

答案 0 :(得分:2)

也许这会有所帮助:

我注意到您使用了this指南。然而,有人在评论中问他是否可以在他的闪屏中添加动画,他的回答是:

  

使用我上面列出的闪屏模式无法制作动画。动画仅在应用程序已加载时才可用。

     

除此之外,您还可以为图层列表设置动画。只需将其作为背景应用于某些视图并为该视图设置动画。

答案 1 :(得分:0)

我遇到了同样的问题,并使用了一种解决方法。我创建了一个没有布局的SplashActivity和一个ProgressActivity,其中包含ProgressBar的布局,并使用Intent从SplashActivity转到ProgressActivity,从ProgressActivity转到MainActivity。下面是一些代码。感谢以下YouTube视频,用于在xml中设置ProgressBar:https://www.youtube.com/watch?annotation_id=annotation_1961654299&feature=iv&src_vid=yJ3cP6r8cxU&v=Ok30rN5SUe8

SplashTheme的抽奖:

<?xml version="1.0" encoding="utf-8"?>
        <layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item>
        <color android:color="#EEEEEE"/>
    </item>

    <item android:id="@android:id/background">


    <shape
            android:shape="ring"
            android:innerRadiusRatio="24"
            android:thickness="18dp"
            android:useLevel="false">
            <solid android:color="#EF9A9A"/>
        </shape>
    </item>

    <item android:id="@android:id/progress">
        <rotate
            android:fromDegrees="0"
            android:toDegrees="360">
            <shape
                android:shape="ring"
                android:innerRadiusRatio="24"
                android:thickness="18dp"
                android:useLevel="false">
                <gradient
                    android:color="@android:color/transparent"
                    android:angle="0"
                    android:startColor="#D50000"
                    android:type="sweep"
                    android:useLevel="false"/>
            </shape>
        </rotate>
    </item>
</layer-list>

ProgressBar的Drawable:与上面相同,但从两个形状中删除了innerRadiusRatio和厚度。

content-progress xml:

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout 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:layout_width="match_parent"
    android:layout_height="match_parent"
    app:layout_behavior="@string/appbar_scrolling_view_behavior"
    tools:context="nl.braaks55.minesweeper.activities.Progress"
    tools:showIn="@layout/activity_progress">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        android:gravity="center">

        <ProgressBar
            android:layout_width="160dp"
            android:layout_height="160dp"
            style="?android:attr/progressBarStyleLarge"
            android:layout_gravity="center"
            android:indeterminateDrawable="@drawable/progress_bar"
            android:max="100"
            android:progress="20"/>

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginTop="20dp"
            android:text="@string/loading"
            android:textAppearance="?android:textAppearanceLarge" />
    </LinearLayout>
</android.support.constraint.ConstraintLayout>

SplashActivity:

public class SplashActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    Intent intent = new Intent(this, ProgressActivity.class);
    startActivity(intent);
    finish();
    }
}

ProgressActivity:

public class ProgressActivity extends AppCompatActivity {
    private static final long DELAY = 3000L;

    TimerTask timerTask = new TimerTask() {
        @Override
        public void run() {
            Intent intent = new Intent(ProgressActivity.this, MainActivity.class);
            startActivity(intent);
            finish();
        }
    };

    Timer timer = new Timer();
    timer.schedule(timerTask, DELAY);
    }
}