splash-screen make - Android SplashScreen




studio welcome (5)

مثال على شاشة Splash:

public class MainActivity extends Activity {
    private ImageView splashImageView;
    boolean splashloading = false;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        splashImageView = new ImageView(this);
        splashImageView.setScaleType(ScaleType.FIT_XY);
        splashImageView.setImageResource(R.drawable.ic_launcher);
        setContentView(splashImageView);
        splashloading = true;
        Handler h = new Handler();
        h.postDelayed(new Runnable() {
            public void run() {
                splashloading = false;
                setContentView(R.layout.activity_main);
            }

        }, 3000);

    }

}

أقوم بتطوير تطبيق يقوم في الأساس بتنزيل الكثير من البيانات في بداية التطبيق نفسه ويعرضها في ListActivity. ما أخطط للقيام به هو إظهار شاشة Splash حتى يتم تحميل البيانات.

حتى الآن كانت كل محاولاتي غير مجدية. لقد حاولت استخدام الطرق المذكورة ، ولكن مشكلتي هي أن النشاط الرئيسي يجب أن يبدأ ولكن يجب أن تكون شاشة Splash مرئية حتى أقوم بتعبئة قائمتي ListActivity. لذلك باختصار لا بد لي من الذهاب من خلال الخطوات التالية:

  1. ابدأ نشاطي الرئيسي.
  2. إظهار شاشة Splash.
  3. استمر في تشغيل العملية في الخلفية.
  4. قم بإنهاء Splashscreen عند اكتمال المعالجة وإظهار القائمة الرئيسية.

آمل أن تفهم ما هو عليه مثل ....


المشكلة على الأرجح أنك تقوم بتشغيل شاشة البداية (نوع من Dialog مثل ProgressDialog أفترض) في نفس مؤشر الترابط مثل كل العمل الذي يجري القيام به. سيؤدي ذلك إلى الحفاظ على عرض شاشة البداية ، والتي يمكن أن تمنعها من عرض الشاشة. تحتاج إلى عرض شاشة البداية ، بدء تشغيل نسخة من AsyncTask لتنزيل كافة البيانات الخاصة بك ، ثم إخفاء شاشة البداية بمجرد اكتمال المهمة.

لذا ، فإن طريقة onCreate () لنشاطك ستعمل ببساطة على إنشاء ProgressDialog وإظهاره. ثم قم بإنشاء AsyncTask وبدء تشغيله. سأجعل AsyncTask فئة داخلية لنشاطك الرئيسي ، لذا يمكنه تخزين البيانات التي قام بتنزيلها إلى بعض المتغيرات في نشاطك وإغلاق ProgressDialog في أسلوب onPostExecute () الخاص به.

لست متأكدًا من كيفية التوضيح بعد ذلك دون إظهار الرمز ، لذلك هنا:

public class MyActivity extends Activity {
    private ProgressDialog pd = null;
    private Object data = null;

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        // Show the ProgressDialog on this thread
        this.pd = ProgressDialog.show(this, "Working..", "Downloading Data...", true, false);

        // Start a new thread that will download all the data
        new DownloadTask().execute("Any parameters my download task needs here");
    }

    private class DownloadTask extends AsyncTask<String, Void, Object> {
         protected Object doInBackground(String... args) {
             Log.i("MyApp", "Background thread starting");

             // This is where you would do all the work of downloading your data

             return "replace this with your data object";
         }

         protected void onPostExecute(Object result) {
             // Pass the result data back to the main activity
             MyActivity.this.data = result;

             if (MyActivity.this.pd != null) {
                 MyActivity.this.pd.dismiss();
             }
         }
    }    
}

من الواضح أن هناك بعض الأجزاء التي تحتاج إلى ملءها ، ولكن يجب تشغيل هذا الرمز وإعطائك نقطة انطلاق جيدة (سامحني إذا كان هناك خطأ في الكود ، ليس لدي إمكانية الوصول إلى Android SDK أثناء كتابة هذا حاليا).

يمكن الاطلاع على بعض القراءة الجيدة حول موضوع AsyncTasks في Android here here .


  1. ابدأ نشاطي الرئيسي.
  2. إظهار شاشة Splash.
  3. استمر في تشغيل العملية في الخلفية.
  4. قم بإنهاء Splashscreen عند اكتمال المعالجة وإظهار القائمة الرئيسية.

حاولت بهذه الطريقة ، لكن المشكلة هي ؛ ستعرض النشاط الرئيسي قبل بدء نشاط شاشة البداية.

لقد صنعتها بهذه الطريقة:

  1. بدء شاشة Splash
  2. عند اكتمال العملية ، ابدأ "النشاط الرئيسي"
  3. لا تنسى التعامل مع زر العودة ، لذلك يجب إغلاق التطبيق سيتم الضغط عليه في النشاط الرئيسي. خلاف ذلك سوف يعود إلى شاشة البداية (حلقة)

مشكلتي هي كيفية تعطيل "إظهار قائمة نشاط شاشة Splash" عن طريق الضغط على زر القائمة.

تصحيح:

تعطيل قائمة العروض:

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // getMenuInflater().inflate(R.menu.activity_main, menu);
    return false;
}

@Override
public boolean onMenuItemSelected(int featureId, MenuItem item) {       
    // return super.onMenuItemSelected(featureId, item);
    return false;
}

فقط للإشارة ، هذه أفضل طريقة للعثور على شاشة البداية: http://android-developers.blogspot.de/2009/03/window-backgrounds-ui-speed.html

كنت أبحث عن هذا لفترة طويلة ، من مستندات androids. إذا كنت تريد تجنب تلك الشاشات السوداء ، فأنت بحاجة إلى إنشاء مظهر مع windowBackground بحيث:

<resources>
    <style name="Theme.Shelves" parent="android:Theme">
        <item name="android:windowBackground">@drawable/background_shelf</item>
        <item name="android:windowNoTitle">true</item>
    </style>
</resources>

وتعيين هذا الموضوع كموضوع للنشاط الرئيسي الخاص بك ... TADA ، splashscreen من أول ثانية.

إذا كنت ترغب في الحصول على خلفية معقدة وليس مجرد صورة سيتم توسيعها لملءها ، فيمكنك استخدام Drawables ، في ما يلي مثال على قائمة الطبقات التي ستحافظ على الشعار مركزًا بخلفية سوداء:

<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >

    <item android:drawable="@color/black">
    </item>
    <item>
        <bitmap
            android:gravity="center"
            android:src="@drawable/logo"
            android:tileMode="disabled" >
        </bitmap>
    </item>
</layer-list>

هناك ما هو أكثر مما تدرك ، يجب عليك أن تتذكر أن النشاط الذي يتم إطلاقه لا يدمر نشاط الاتصال بشكل ضمني. بالتأكيد ، يمكنك إعداده بحيث يقوم المستخدم بالنقر فوق زر للانتقال إلى إحدى الصفحات ، ثم بدء نشاط تلك الصفحة وتدمير النشاط الحالي. هذا يسبب الكثير من النفقات العامة. أفضل دليل يمكنني تقديمه لك هو:

** ابدأ نشاطًا جديدًا فقط إذا كان من المنطقي أن يكون النشاط الرئيسي ويفتح هذا النشاط في الوقت نفسه (فكر في عدة نوافذ).

من الأمثلة الرائعة على الوقت الذي يكون فيه من المنطقي وجود أنشطة متعددة هو Google Drive. النشاط الرئيسي يوفر مستكشف الملفات. عند فتح ملف ، يتم تشغيل نشاط جديد لعرض هذا الملف. يمكنك الضغط على زر التطبيقات الحديثة التي ستسمح لك بالعودة إلى المتصفح دون إغلاق الوثيقة المفتوحة ، ثم ربما فتح مستند آخر بالتوازي مع الأول.





android splash-screen