2017-02-03 17 views
3

Meine App zeigt einen Begrüßungsbildschirm an, während die App geladen wird. Ich möchte einen animierten Fortschrittsbalken unterhalb des Symbols auf dem Begrüßungsbildschirm platzieren. Ich habe versucht, XML zu verwenden, aber es stürzt ab! Sagt ungültige Fortschrittsbalken.Android - Fortschrittsbalken auf Splash-Screen

meinen Code Hier ist das Splash-Screen zu nennen, 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> 

Hier ist meine background_splash.xml Datei

<?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> 

ich wirklich nicht, einen Begrüßungsbildschirm mit einem machen wollen andere Methode, weil diese Methode wirklich einfach war. Irgendwelche Ideen?

+0

Warum setzen Sie das Symbol und den Fortschrittsbalken nicht direkt in die Datei splash.xml –

Antwort

0

Widgets wie Fortschrittsbalken und Bildansicht (Bitmap) nicht in die Zeichnungsdatei einfügen, stattdessen in die Layoutdatei einfügen, in der das Layout relativ sein sollte und dann die relative Hintergrundfarbe als splash_screen_bg festlegen und imageview und progressbar hinzufügen innerhalb des relativen Layouts.

0

Hier ist ein 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> 
1

ist der Schlüssel in diesem Tutorial: http://www.logicchip.com/android-splash-screen-progress-bar/ Sie müssen un-Datei in ziehbar Ordner erstellen: Beispiel 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> 

neuen Stil hinzufügen styles.xml

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

AndroidManifest Datei sollten Sie setzen die SplashActivity wie Launchers Aktivität einzureichen.

<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> 

Der wichtige Teil kommt hier: Sie ein Layout erstellen muß, wenn die Fortschrittsbalken werden, dieses Layout hat keinen Hintergrund, so dass die Fortschrittsbalken vorwärts Schrägstrich erscheint.

<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> 

schließlich in Ihrer Activity.java Datei:

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 als setContentView das Layout erstellt. Das ist alles..!

Verwandte Themen