android - progress bar on splash screen

对着背影说爱祢 提交于 2019-12-10 16:21:23

问题


My app displays a splash screen while the app is loading. I want to put an animated progress bar below the icon on the splash screen. I tried using XML, but it's crashing! Says invalid tag progressbar.

Here's my code to call the splash screen, in styles.xml

<style name="AppTheme.BrandedLaunch" parent="AppThemeDark">
    <item name="windowActionBar">false</item>
    <item name="windowNoTitle">true</item>
    <item name="android:windowBackground">@drawable/background_splash</item>
</style>

Here's my background_splash.xml file

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

<item>
    <bitmap
        android:gravity="center"
        android:tileMode="disabled"
        android:src="@drawable/ic_launcher"/>
</item>

<item>
<ProgressBar
    android:id="@+id/progressBar"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_centerHorizontal="true"
    android:layout_centerVertical="true"
/>
</item>
</layer-list>

I don't really want to make a splash screen using a different method, because this method was really simple. Any ideas?


回答1:


the key is in this tutorial: http://www.logicchip.com/android-splash-screen-progress-bar/ You must create un file in drawable folder: example splas_screen.xml

    <?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="100dp"
    android:layout_height="100dp">
    <item>
        <color android:color="@color/main_color_grey_50"/>
    </item>
    <item>
        <bitmap
            android:gravity="center"
            android:filter="true"
            android:src="@drawable/logomies"
            />
    </item>
</layer-list>

Add new Style to file styles.xml

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

AndroidManifest file you should set the SplashActivity like your LAUNCHER Activity.

<application
        android:name=".ActBenApplication"
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/ActivityTheme">

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

The important part comes here: you must create a layout where the progress bar will be, this layout has no background so the progress bar appears forward of slash.

<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:id="@+id/splash_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".main.ui.SplashActivity">


    <ProgressBar
        android:id="@+id/progressBar2"
        style="?android:attr/progressBarStyleHorizontal"
        android:visibility="visible"
        android:indeterminateOnly="true"/>
</android.support.constraint.ConstraintLayout>

Finally in your Activity.java file:

public class SplashActivity extends AppCompatActivity{

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.splash);


        new Handler().postDelayed(new Runnable() {

            @Override
            public void run() {
                // This method will be executed once the timer is over
                // Start your app main activity
                Intent i = new Intent(SplashActivity.this, MainActivity.class);
                startActivity(i);

                // close this activity
                finish();
            }
        }, 3000);
    }
}

Set as the setContentView to the layout created. That is all..!




回答2:


Don't put widgets like progressbar and imageview(bitmap) in the drawable file, instead add it in your layout file, in which parent layout should be relative layout and then set relativelayout background color as splash_screen_bg and add imageview and progressbar inside relative layout.




回答3:


Here is one hack.

SplashActivity.java

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        final View rootView = getWindow().getDecorView().getRootView();
        rootView.setBackgroundDrawable(getResources().getDrawable(R.drawable.test));
        rootView.post(new Runnable() {
            @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
            @Override
            public void run() {
                ((AnimationDrawable) rootView.getBackground()).start();
            }
        });
    }

test.xml

<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/list"
        android:oneshot="false">
        <item
            android:drawable="@drawable/frame_1"
            android:duration="20" />
        <item
            android:drawable="@drawable/frame_2"
            android:duration="20" />
        <item
            android:drawable="@drawable/frame_3"
            android:duration="20" />
        <item
            android:drawable="@drawable/frame_4"
            android:duration="20" />
        <item
            android:drawable="@drawable/frame_5"
            android:duration="20" />
        <item
            android:drawable="@drawable/frame_6"
            android:duration="20" />
        <item
            android:drawable="@drawable/frame_7"
            android:duration="20" />
        <item
            android:drawable="@drawable/frame_8"
            android:duration="20" />
        <item
            android:drawable="@drawable/frame_9"
            android:duration="20" />

    </animation-list>


来源:https://stackoverflow.com/questions/42017161/android-progress-bar-on-splash-screen

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!