আমি কীভাবে একটি স্প্ল্যাশ স্ক্রিন তৈরি করব?


548

আমি আমার অ্যাপ্লিকেশনটিকে আরও পেশাদার দেখাতে চেয়েছিলাম, তাই আমি স্থির করেছিলাম যে আমি একটি স্প্ল্যাশ স্ক্রিন তৈরি করতে চাই।

আমি কীভাবে এটি তৈরি করব এবং তারপরে এটি বাস্তবায়ন করব?


58
কেন একটি অ্যাপ্লিকেশন স্প্ল্যাশ স্ক্রিন ব্যবহার করে আরও পেশাদার দেখায়? আমি জানি না এমন কোনও 'পেশাদার' অ্যান্ড্রয়েড অ্যাপ যা পেয়েছে।
থিওমেগা

7
@ থেওমেগা সহ একমত স্প্ল্যাশ স্ক্রিনগুলি কেবল সাধারণ বিরক্তিকর।
ম্যাট বল

85
আপনার যদি ব্যাকগ্রাউন্ড লোডিংয়ের কাজ করতে হয় তবে কেবল একটি স্প্ল্যাশ স্ক্রিন প্রদর্শন করা উচিত। অন্যথায়, আপনি যত তাড়াতাড়ি সম্ভব আপনার অ্যাপ্লিকেশন থেকে ব্যবহারকারীদের কী চান তা দেওয়ার পরে আপনার অ্যাপটি আরও "পেশাদার" দেখায়। ব্যবহারকারীরা 100 মিমি ছাড়িয়ে বেশি বিলম্ব লক্ষ্য করে (এবং বিরক্ত হন) এবং আপনি একটি স্প্ল্যাশ স্ক্রিন যুক্ত করে এই প্রান্তিকের উপরের আকারের ক্রম।
কোডফিউশনমোবাইল

74
কিন্ডেল অ্যাপ্লিকেশন, অলডিকো (পাঠক), ডলফিন .. উম্মে ওএস :) তারা সবাই স্প্ল্যাশ পেয়েছে। অপেরা মোবাইল, ম্যান্টন রিডার, মানচিত্র। আমি যেতে পারে। যদি এটি কোনও লোড আড়াল করে, তবে এটি আপনার অ্যাপ্লিকেশনটি শুরু হয়েছে তা কমপক্ষে ব্যবহারকারীকে জানাতে দিন। স্ক্রিনে আপনার মধ্যে কমপক্ষে কিছু উপস্থিত থাকলে কয়েক সেকেন্ডের বিলম্ব আরও ভালভাবে লুকিয়ে থাকে।
baash05

9
স্প্ল্যাশ স্ক্রিন আপনাকে এবং আপনার গেম বা অ্যাপ্লিকেশন সংস্থার নাম বা লোগোটির বিজ্ঞাপন দেওয়ার দুর্দান্ত সুযোগ দেয়। আমি স্প্ল্যাশ স্ক্রিনটিকে ক্লিকযোগ্য করে তুলতে চাই যাতে ব্যবহারকারীর কাছে গেমের সামনে এগিয়ে যাওয়ার বিকল্প রয়েছে। ব্যবহারকারী যখন আপনার অ্যাপটি খোলেন ততবার আধা সেকেন্ডের জন্যও যদি সর্বদা আপনার সংস্থার লোগোটি দেখেন তবে তারা সম্ভবত আপনি কে হেক তা মনে রাখবেন। আপনার অ্যাপ্লিকেশনটির সাথে তারা ভাল অভিজ্ঞতা নিচ্ছেন তা নিশ্চিত করুন।
চামটাকে সান

উত্তর:


509

আরও পড়া:

পুরানো উত্তর:

কীভাবে : সাধারণ স্প্ল্যাশ স্ক্রিন

এই উত্তরগুলি আপনাকে দেখায় যে যখন ব্র্যান্ডিংয়ের কারণে আপনার অ্যাপ্লিকেশন শুরু হয় তখন একটি নির্দিষ্ট সময়ের জন্য কীভাবে একটি স্প্ল্যাশ স্ক্রিন প্রদর্শন করতে হয়। যেমন আপনি স্প্ল্যাশ স্ক্রিনটি 3 সেকেন্ডের জন্য চয়ন করতে পারেন। তবে আপনি যদি পরিবর্তিত পরিমাণে (যেমন অ্যাপ্লিকেশন শুরু করার সময়) জন্য স্প্যাশ স্ক্রিনটি দেখাতে চান তবে আপনার আবদুল্লাহর উত্তর https://stackoverflow.com/a/15832037/401025 পরীক্ষা করা উচিত । তবে সচেতন থাকুন যে অ্যাপ্লিকেশন স্টার্টআপটি নতুন ডিভাইসে খুব দ্রুত হতে পারে তাই ব্যবহারকারী কেবল একটি ফ্ল্যাশ দেখতে পাবেন যা খারাপ ইউএক্স।

প্রথমে আপনাকে আপনার layout.xmlফাইলে স্প্যাশ স্ক্রিনটি নির্ধারণ করতে হবে

  <?xml version="1.0" encoding="utf-8"?>
  <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
          android:orientation="vertical" android:layout_width="fill_parent"
          android:layout_height="fill_parent">

          <ImageView android:id="@+id/splashscreen" android:layout_width="wrap_content"
                  android:layout_height="fill_parent"
                  android:src="@drawable/splash"
                  android:layout_gravity="center"/>

          <TextView android:layout_width="fill_parent"
                    android:layout_height="wrap_content"
                    android:text="Hello World, splash"/>

  </LinearLayout>

এবং আপনার ক্রিয়াকলাপ:

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;

public class Splash extends Activity {

    /** Duration of wait **/
    private final int SPLASH_DISPLAY_LENGTH = 1000;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle icicle) {
        super.onCreate(icicle);
        setContentView(R.layout.splashscreen);

        /* New Handler to start the Menu-Activity 
         * and close this Splash-Screen after some seconds.*/
        new Handler().postDelayed(new Runnable(){
            @Override
            public void run() {
                /* Create an Intent that will start the Menu-Activity. */
                Intent mainIntent = new Intent(Splash.this,Menu.class);
                Splash.this.startActivity(mainIntent);
                Splash.this.finish();
            }
        }, SPLASH_DISPLAY_LENGTH);
    }
}

এখানেই শেষ ;)


3
@ ব্যবহারকারী2606414 আপনার সম্পূর্ণ ত্রুটির লগটি আটকে দেওয়ার জন্য সমস্যার জন্য দয়া করে একটি প্রশ্ন তৈরি করুন।
শে

39
ম্যানিফেস্টে স্প্ল্যাশ যুক্ত করতে ভুলবেন না
জাওয়াদ জেব

8
@ পিটার প্রশ্নটি ডেটা লোড করার সময় কীভাবে স্প্ল্যাশ স্ক্রিন প্রদর্শন করবেন তা নয়।
উপুড় করুন

18
এটি স্প্ল্যাশ স্ক্রিনের জন্য উপযুক্ত সমাধান নয়, এটি ব্যবহারকারীকে একটি স্প্ল্যাশ স্ক্রিন দেখানোর জন্য অপেক্ষা করে তোলে, তবে স্প্ল্যাশ স্ক্রিনের উদ্দেশ্য বিপরীত। ব্যবহারকারী অপেক্ষা করার সময় এটি একটি স্প্ল্যাশ স্ক্রিন প্রদর্শন করা উচিত। @ আবদুল্লাহ এর সমাধান দেখুন।
এফাইক 9

4
বরং সময়ের জন্য অ্যাপ স্টল করা SPLASH_DISPLAY_LENGTH। পরিবর্তে আপনার এটি করা উচিত: bignerdranch.com/blog/splash-screens-theright-way
miguel.martin

593

নোট করুন এই সমাধানটি ব্যবহারকারীকে আরও অপেক্ষা করতে দেবে না: স্প্ল্যাশ স্ক্রিনের বিলম্ব অ্যাপ্লিকেশনটির শুরু হওয়ার সময়ের উপর নির্ভর করে।

আপনি যখন কোনও অ্যান্ড্রয়েড অ্যাপ্লিকেশন খুলবেন তখন আপনি অ্যাপটির শিরোনাম এবং আইকনটির উপরের ডিফল্টরূপে কিছু কালো পর্দা পাবেন, আপনি কোনও স্টাইল / থিম ব্যবহার করে এটিকে পরিবর্তন করতে পারবেন।

প্রথমে মান ফোল্ডারে একটি স্টাইল.এক্সএমএল তৈরি করুন এবং এতে একটি শৈলী যুক্ত করুন।

<style name="splashScreenTheme" parent="@android:style/Theme.DeviceDefault.Light.NoActionBar">
    <item name="android:windowBackground">@drawable/splash_screen</item>
</style>

ব্যবহারের পরিবর্তে @android:style/Theme.DeviceDefault.Light.NoActionBarআপনি পিতামাতার মতো অন্য কোনও থিম ব্যবহার করতে পারেন।

দ্বিতীয়ত, আপনার অ্যাপে Manifest.xML android:theme="@style/splashScreenTheme"আপনার মূল ক্রিয়াকলাপে যুক্ত করুন।

<activity
        android:name="MainActivity"
        android:label="@string/app_name"
        android:theme="@style/splashScreenTheme" >

তৃতীয়, আপনার onCreate () প্রবর্তন ক্রিয়াকলাপে আপনার থিম আপডেট করুন।

protected void onCreate(Bundle savedInstanceState) {
    // Make sure this is before calling super.onCreate
    setTheme(R.style.mainAppTheme);
    super.onCreate(savedInstanceState);
}

আপডেট পরীক্ষা করে দেখুন এই পোস্টে

@ ম্যাট 1 এচ এবং @ অ্যাডেলরিওসানটিয়াগোকে ধন্যবাদ


3
দেখে মনে হচ্ছে "পিতামাতারা" কেবলমাত্র 14
এআইপি

103
এটি একটি স্প্ল্যাশ পর্দা করার সঠিক উপায়। ধন্যবাদ! বিলম্ব সহ আরও বেশি ভোটের উত্তর দেওয়া কেবল খারাপ অভ্যাস। কোনও কিছুই ব্যবহারকারীর প্রথম কার্যক্ষম স্ক্রিনটি দেখতে দেরি করা উচিত নয়।
দিনটি

7
এর সাথে আমার একটি সমস্যা হ'ল এটি <item name="android:background">ওভাররাইড হবে windowBackground। এবং android:backgroundসংজ্ঞায়িত না করে, কোনও খণ্ডে আমার ব্যাকগ্রাউন্ডটি পূর্বগ্রন্থের সামগ্রীর পিছনের ক্রিয়াকলাপটি স্বচ্ছ হতে পারে।
উইলিয়াম গ্র্যান্ড

4
@ আবদুল্লাহ: আপনার বক্তব্য আমি অনুসরণ করেছি। এটি সূক্ষ্মভাবে কাজ করে, তবে স্প্ল্যাশ স্ক্রিনটি ক্রিয়াকলাপের পরিবর্তনে কয়েক মিলিসেকেন্ডের জন্য উপস্থিত হয় appears
নিজম.এসপি

3
@ আবদুল্লাহ ধন্যবাদ! এটি একটি সম্ভাব্য সমাধান হতে পারে তবে আমি এটি খুঁজে পেলাম: Plus.google.com/+AndroidDevelopers/posts/Z1Wwainpjhd , প্রতিটি পর্দার আকারের জন্য বিভিন্ন চিত্র তৈরি করা এড়াতে চিত্র সহ একটি এক্সএমএল তৈরি করাও সম্ভব হবে যাতে এটি দেখতে পাবেন সব পর্দায় জরিমানা।
adelriosantiago

52
  • একটি ক্রিয়াকলাপ তৈরি করুন: স্প্ল্যাশ
  • একটি লেআউট এক্সএমএল ফাইল তৈরি করুন: স্প্ল্যাশ.এক্সএমএল
  • ইউআই উপাদানগুলি স্প্ল্যাশ.এক্সএমএল লেআউটে রাখুন যাতে এটি আপনার দেখতে কেমন লাগে
  • আপনার স্প্ল্যাশ.জাভা দেখতে দেখতে এটি দেখতে পারে:

    public class Splash extends Activity {
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.splash);
    
            int secondsDelayed = 1;
            new Handler().postDelayed(new Runnable() {
                    public void run() {
                            startActivity(new Intent(Splash.this, ActivityB.class));
                            finish();
                    }
            }, secondsDelayed * 1000);
        }
    }
  • ActivityB.classস্প্ল্যাশ স্ক্রিনের পরে আপনি যে কোনও কার্যকলাপ শুরু করতে চান তাতে পরিবর্তন করুন

  • আপনার ম্যানিফেস্ট ফাইলটি পরীক্ষা করুন এবং এটির মতো দেখতে হবে

        <activity
            android:name=".HomeScreen"
            android:label="@string/app_name">     
        </activity>

        <activity
            android:name=".Splash"
            android:label="@string/title_activity_splash_screen">     
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

28
এটি স্প্ল্যাশ স্ক্রিনের উদ্দেশ্য নয়। এটি অতিরিক্ত 1 সেকেন্ড বিলম্ব করে। অ্যাপ্লিকেশনটির প্রথম স্ক্রীনটি লোড করার সময় স্প্ল্যাশ স্ক্রিনটি একটি চিত্র হওয়া উচিত। এই লিঙ্কটি সাহায্য করতে পারে। stackoverflow.com/a/7057332/869451
efeyc

2
@ এফাইক: আপনি 100% ঠিক আছেন .. তবুও, অ্যাপ্লিকেশন শুরু হওয়ার সময় এটি বেশ সুন্দর দেখাচ্ছে .. আপনি কি ভাবেন না?
ম্যাকলান

1
@ Suda.nese অবশ্যই না। ব্যবহারকারীরা কোনও ছবি দেখতে চান না, ব্যবহারকারীরা অ্যাপটি ব্যবহার করতে চান এবং কোনও দেরি না করে
টিম

1
@ টিমকাস্টেলিজেন্স এটি বিকাশের অধীনে থাকা অ্যাপের উপর নির্ভর করে এবং স্প্ল্যাশ স্ক্রিনটি কেমন দেখাচ্ছে .. অবশ্যই এটি ব্যবহারিক হতে বোঝানো হয়েছে, তবে কে বলেছে এটি অন্যথায় ব্যবহার করা যাবে না !!
ম্যাকলান

5
@ Suda.nese এর সাথে সম্মত হন যদি অ্যাপ্লিকেশন প্রয়োজনীয়তাগুলিতে একটি স্প্ল্যাশ স্ক্রিনের চেয়ে একটি স্প্ল্যাশ স্ক্রিন অন্তর্ভুক্ত থাকে! অবশ্যই, এটি ব্যবহারকারীর জন্য কাঙ্ক্ষিত নাও হতে পারে তবে কোনও ক্লায়েন্ট যদি একটি স্প্ল্যাশ স্ক্রিন চায়, তবে গোশ তাদের দিয়ে দিন
জেমস

29

উপরের উত্তরগুলি খুব ভাল, তবে আমি অন্য কিছু যুক্ত করতে চাই। আমি অ্যান্ড্রয়েডে নতুন, আমি আমার বিকাশের সময় এই সমস্যাগুলি পূরণ করেছি। আশা করি এটি আমার মতো কাউকে সহায়তা করতে পারে।

  1. স্প্ল্যাশ স্ক্রিনটি আমার অ্যাপ্লিকেশনটির প্রবেশের পয়েন্ট, সুতরাং AndroidManLive.xML এ নিম্নলিখিত লাইনগুলি যুক্ত করুন।

        <activity
            android:name=".SplashActivity"
            android:theme="@android:style/Theme.DeviceDefault.Light.NoActionBar">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
  2. স্প্ল্যাশ স্ক্রিনটি একবার অ্যাপ লাইফ চক্রটিতে একবার দেখা উচিত, আমি স্প্ল্যাশ স্ক্রিনের অবস্থা রেকর্ড করতে একটি বুলিয়ান ভেরিয়েবল ব্যবহার করি এবং এটি কেবল প্রথমবার দেখায়।

    public class SplashActivity extends Activity {
        private static boolean splashLoaded = false;
    
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
    
            if (!splashLoaded) {
                setContentView(R.layout.activity_splash);
                int secondsDelayed = 1;
                new Handler().postDelayed(new Runnable() {
                    public void run() {
                        startActivity(new Intent(SplashActivity.this, MainActivity.class));
                        finish();
                    }
                }, secondsDelayed * 500);
    
                splashLoaded = true;
            }
            else {
                Intent goToMainActivity = new Intent(SplashActivity.this, MainActivity.class);
                goToMainActivity.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
                startActivity(goToMainActivity);
                finish();
            }
        }
    }

শুভ কোডিং!


10
আপনি যোগ করতে পারেন android:noHistory="true"মধ্যে AndroidManifest.xmlফিরে বোতাম ব্যবহার করে স্প্ল্যাশ পর্দা ফিরে যাচ্ছে ব্যবহারকারীকে প্রতিরোধ।
রাহেল

15

আবদুল্লাহর উত্তর দুর্দান্ত। তবে আমি আমার উত্তর সহ এটিতে আরও কিছু বিশদ যুক্ত করতে চাই।

একটি স্প্ল্যাশ স্ক্রিন বাস্তবায়ন করা হচ্ছে

একটি স্প্ল্যাশ স্ক্রিনটি সঠিকভাবে প্রয়োগ করা আপনি কল্পনা করার চেয়ে কিছুটা আলাদা। আপনার স্প্ল্যাশ ক্রিয়াকলাপে কোনও লেআউট ফাইল স্ফূরণ করার আগে আপনি যে স্প্ল্যাশ দৃশ্যটি দেখছেন তা অবিলম্বে প্রস্তুত হতে হবে।

সুতরাং আপনি কোনও লেআউট ফাইল ব্যবহার করবেন না। পরিবর্তে, আপনার স্প্ল্যাশ স্ক্রিনটির ব্যাকগ্রাউন্ডটিকে ক্রিয়াকলাপের থিমের পটভূমি হিসাবে উল্লেখ করুন। এটি করার জন্য, প্রথমে রেজ / অঙ্কনযোগ্য একটি এক্সএমএল অঙ্কন তৈরি করুন।

background_splash.xml

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

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

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

</layer-list>

এটির সাথে কেন্দ্রের পটভূমির রঙে লোগো সহ এটি কেবল একটি স্তর তালিকাভুক্ত।

এখন স্টাইল.এক্সএমএল খুলুন এবং এই স্টাইলটি যুক্ত করুন

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

এই থিমটি অ্যাকশনবারে এবং আমরা সবেমাত্র উপরে তৈরি পটভূমি সহ করতে হবে।

এবং ম্যানিফেস্টে আপনাকে স্প্ল্যাশটেমটিকে ক্রিয়াকলাপ হিসাবে সেট করতে হবে যা আপনি স্প্ল্যাশ হিসাবে ব্যবহার করতে চান।

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

    <category android:name="android.intent.category.LAUNCHER" />
</intent-filter>

তারপরে আপনার ক্রিয়াকলাপের কোডের ভিতরে ব্যবহারকারীকে স্পষ্ট করার পরে নির্দিষ্ট পর্দায় নেভিগেট করুন।

public class SplashActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

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

এটি করার সঠিক উপায়। আমি এই রেফারেন্সগুলি উত্তরের জন্য ব্যবহার করেছি।

  1. https://material.google.com/patterns/launch-screens.html
  2. https://www.bignerdranch.com/blog/splash-screens-the-right-way/ আমাকে সঠিক দিকের দিকে ঠেলে দেওয়ার জন্য এই ছেলেদের ধন্যবাদ। আমি অন্যকে সাহায্য করতে চাই কারণ গৃহীত উত্তরগুলি স্প্ল্যাশ স্ক্রিন করার পরামর্শ দেওয়া নয়।

1
আমি YouTubeএই সম্পর্কে একটি টিউটোরিয়াল দেখেছি । তবে আমি মনে করি বিটম্যাপ আকারটি সমস্যা হবে কারণ আপনি এটি ব্যবহার করে এটির আকার পরিবর্তন করতে পারবেন না layer-list
RoCk RoCk

14
  1. তৈরি একটি Activity SplashScreen.java

    public class SplashScreen extends Activity {
    protected boolean _active = true;
    protected int _splashTime = 3000; // time to display the splash screen in ms
    
    
    
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.splashscreen);
    
        Thread splashTread = new Thread() {
            @Override
            public void run() {
                try {
                    int waited = 0;
                    while (_active && (waited < _splashTime)) {
                        sleep(100);
                        if (_active) {
                            waited += 100;
                        }
                    }
                } catch (Exception e) {
    
                } finally {
    
                    startActivity(new Intent(SplashScreen.this,
                            MainActivity.class));
                    finish();
                }
            };
                 };
        splashTread.start();
    }
     }
  2. splashscreen.xml এই মত হবে

    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
      android:layout_width="600px" android:layout_height="1024px"
      android:background="#FF0000">
    </RelativeLayout> 

13

ডিফল্টরূপে একটি স্প্ল্যাশ স্ক্রেন স্বয়ংক্রিয়ভাবে আপনার অ্যাপ্লিকেশনটিকে আরও পেশাদার দেখায় না। পেশাগতভাবে ডিজাইন করা স্প্ল্যাশ স্ক্রিনে আপনার অ্যাপ্লিকেশনটিকে আরও পেশাদার দেখানোর সম্ভাবনা রয়েছে তবে আপনি যদি কীভাবে লিখতে জানেন না তবে আপনার বাকী অ্যাপ্লিকেশনটি আসলে কতটা পেশাদার হবে।

স্প্ল্যাশ স্ক্রিন থাকার একমাত্র কারণ (অজুহাত) সম্পর্কে কারণ আপনি প্রচুর পরিমাণে গণনা করছেন বা জিপিএস / ওয়াইফাই শুরু হওয়ার জন্য অপেক্ষা করছেন কারণ আপনার অ্যাপ্লিকেশনটি শুরু হওয়ার আগেই তার উপর নির্ভর করে। এই গণনাগুলির ফলাফল বা জিপিএস / ওয়াইফাই (ইত্যাদি) এর অ্যাক্সেস ছাড়াই আপনার অ্যাপ্লিকেশনটি পানিতে মরে গেছে, সুতরাং আপনার মনে হয় আপনার একটি স্প্ল্যাশ স্ক্রিন দরকার, এবং অন্য কোনও চলমান প্রোগ্রামগুলির জন্য পটভূমি সহ পর্দার দৃশ্য আটকাতে হবে U )।

এরকম স্প্ল্যাশ স্ক্রিনটি আপনার সম্পূর্ণ স্ক্রিন অ্যাপ্লিকেশনটির মতো হওয়া উচিত যাতে এটি ইতিমধ্যে শুরু হয়ে গেছে এমন ধারণা দেয়, তারপরে দীর্ঘ গণনা শেষ হওয়ার পরে চূড়ান্ত বিশদটি পূরণ করা যায় (চিত্রটি টুইঙ্ক করেছে)। সুযোগ যে ক্ষেত্রে হচ্ছে বা এটি যে একমাত্র উপায় প্রোগ্রাম ডিজাইন করা পারে মহৎ ছোট

ব্যবহারকারীকে (এবং অপারেটিং সিস্টেমের বাকী অংশগুলি) আপনার প্রোগ্রামটিকে এমন কিছু বিষয়ের উপর নির্ভরশীল করে তুলবে যা কিছুক্ষণ সময় নেবে (যখন অপেক্ষাটির সময়কাল অনিশ্চিত থাকে) তার চেয়ে আরও কিছু করার অনুমতি দেওয়া ভাল।

আপনার ফোনে ইতিমধ্যে আইকন রয়েছে যেগুলি বলে যে জিপিএস / ওয়াইফাই শুরু হচ্ছে। স্প্ল্যাশ স্ক্রিন দ্বারা নেওয়া সময় বা স্থান প্রাক-গণনাগুলি লোড করতে বা আসলে গণনাগুলি করতে ব্যয় হতে পারে। আপনার তৈরি সমস্যাগুলির জন্য নীচের প্রথম লিঙ্কটি দেখুন এবং কী বিবেচনা করা উচিত।

আপনার যদি অবশ্যই এই গণনা বা জিপিএস / ওয়াইফাইয়ের জন্য অপেক্ষা করতে হবে তবে কেবলমাত্র অ্যাপ্লিকেশনটি শুরু করা এবং একটি পপ-আপ থাকা সবচেয়ে ভাল হবে যা বলছে যে গণনার জন্য অপেক্ষা করা দরকার (একটি পাঠ্যসূচী "আরম্ভ করা" বার্তাটি ভাল)। জিপিএস / ওয়াইফাইয়ের জন্য অপেক্ষা করা প্রত্যাশিত (যদি তারা ইতিমধ্যে অন্য কোনও প্রোগ্রামে সক্ষম না করা থাকে) তবে তাদের অপেক্ষার সময় ঘোষণা করা অপ্রয়োজনীয়।

মনে রাখবেন যে স্প্ল্যাশ স্ক্রিনটি যখন আপনার প্রোগ্রামটি শুরু হয় আসলেই ইতিমধ্যে চলছে, আপনি যা করছেন তা আপনার প্রোগ্রামটির ব্যবহারকে বিলম্ব করছে এবং সিপিইউ / জিপিইউকে এমন কিছু করতে হগিং করছে যা সবচেয়ে বেশি প্রয়োজনীয় মনে হয় না।

আমরা যতক্ষণ না আপনার প্রোগ্রামটি শুরু করি প্রতিবার আমরা আপনার স্প্ল্যাশ স্ক্রিনটি অপেক্ষা করতে এবং দেখতে চাইতাম বা আমরা এটি পেশাদারভাবে লেখা অনুভব করব না। স্প্ল্যাশ স্ক্রিনটি পুরো স্ক্রিন এবং প্রকৃত প্রোগ্রামের স্ক্রিনের একটি সদৃশ তৈরি করা (যাতে আমরা মনে করি এটি বাস্তবায়িত হয়েছিল যখন বাস্তবে এটি হয়নি) আপনার লক্ষ্য অর্জন করতে পারে (আপনার প্রোগ্রামটিকে আরও পেশাদার দেখানোর জন্য) তবে আমি এতে খুব বেশি বাজি ধরব না।

কেন এটি করবেন না: http://cyrilmottier.com/2012/05/03/splash-screens-are-evil-dont-use-them/

এটি কীভাবে করবেন: https://encrypted.google.com/search?q=Android+splash+screen+source

সুতরাং এটি না করার একটি ভাল কারণ আছে তবে যদি আপনি নিশ্চিত হন যে কোনওভাবে আপনার পরিস্থিতি সেই উদাহরণগুলির বাইরে চলে যায় তবে এটি করার উপায়টি উপরে দেওয়া হল। নিশ্চিত হন যে এটি আপনার অ্যাপ্লিকেশনটিকে আরও বেশি পেশাদার দেখায় বা এটি করার জন্য আপনি যে একমাত্র কারণ দিয়েছেন তা আপনি পরাজিত করেছেন।

এটি এমন একটি ইউটিউব চ্যানেলের মতো যা প্রতিটি ভিডিওকে একটি দীর্ঘ গ্রাফিক ইন্ট্রো (এবং আউট্রো) দিয়ে শুরু করে বা একটি রসিকতা বলতে বা বিগত সপ্তাহে কী ঘটেছিল তা ব্যাখ্যা করার প্রয়োজনীয়তা অনুভব করে (যখন এটি কোনও কৌতুক বা লাইফস্টাইল চ্যানেল নয়)। শুধু শো প্রদর্শন! (শুধু প্রোগ্রাম চালান)


12

সর্বোপরি উত্তরগুলি খুব ভাল। তবে মেমোরি ফুটো হওয়ার সমস্যা রয়েছে। এই সমস্যাটি প্রায়শই অ্যান্ড্রয়েড সম্প্রদায়টিতে "একটি কার্যকলাপ ফাঁস" নামে পরিচিত । এখন এর অর্থ কী?

যখন কনফিগারেশন পরিবর্তন ঘটে, যেমন ওরিয়েন্টেশন পরিবর্তন, অ্যান্ড্রয়েড ক্রিয়াকলাপটি ধ্বংস করে এবং পুনরায় তৈরি করে। সাধারণত, আবর্জনা সংগ্রাহক কেবল পুরানো ক্রিয়াকলাপের উদাহরণের বরাদ্দ মেমরিটি সাফ করবেন এবং আমরা সবাই ভাল।

"একটি কার্যকলাপ ফাঁস" বলতে বোঝায় এমন পরিস্থিতি যেখানে আবর্জনা সংগ্রাহক পুরানো ক্রিয়াকলাপের বরাদ্দ মেমরিটি সাফ করতে পারে না কারণ এটি এমন being (strong) referencedকোনও বস্তু যা ক্রিয়াকলাপের উদাহরণটি দিয়েছিল from প্রতিটি অ্যান্ড্রয়েড অ্যাপের জন্য নির্দিষ্ট পরিমাণ মেমরি বরাদ্দ থাকে। যখন আবর্জনা সংগ্রাহক অব্যবহৃত মেমরি মুক্ত করতে পারবেন না, তখন অ্যাপটির কার্যকারিতা ধীরে ধীরে হ্রাস পাবে এবং শেষ পর্যন্ত ক্রাশ হবে craOutOfMemory ত্রুটির ।

অ্যাপটি মেমরি ফাঁস করে কিনা তা কীভাবে নির্ধারণ করবেন? দ্রুততম উপায় হ'ল অ্যান্ড্রয়েড স্টুডিওতে মেমরি ট্যাবটি খুলুন এবং আপনি ওরিয়েন্টেশন পরিবর্তন করার সাথে সাথে বরাদ্দ মেমরিটিতে মনোযোগ দিন। যদি বরাদ্দ মেমরিটি ক্রমাগত বাড়তে থাকে এবং কখনই হ্রাস না করে তবে আপনার মেমরি ফাঁস হয়।

1. ব্যবহারকারী যখন অরিয়েন্টেশন পরিবর্তন করে তখন মেমরি ফুটো। এখানে চিত্র বর্ণনা লিখুন

প্রথমে আপনাকে আপনার লেআউট রিসোর্স splashscreen.xmlফাইলে স্প্ল্যাশ স্ক্রিনটি সংজ্ঞায়িত করতে হবে

স্প্ল্যাশ স্ক্রিন ক্রিয়াকলাপের জন্য নমুনা কোড।

public class Splash extends Activity {
 // 1. Create a static nested class that extends Runnable to start the main Activity
    private static class StartMainActivityRunnable implements Runnable {
        // 2. Make sure we keep the source Activity as a WeakReference (more on that later)
        private WeakReference mActivity;

        private StartMainActivityRunnable(Activity activity) {
         mActivity = new WeakReference(activity);
        }

        @Override
        public void run() {
         // 3. Check that the reference is valid and execute the code
            if (mActivity.get() != null) {
             Activity activity = mActivity.get();
             Intent mainIntent = new Intent(activity, MainActivity.class);
             activity.startActivity(mainIntent);
             activity.finish();
            }
        }
    }

    /** Duration of wait **/
    private final int SPLASH_DISPLAY_LENGTH = 1000;

    // 4. Declare the Handler as a member variable
    private Handler mHandler = new Handler();

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(icicle);
        setContentView(R.layout.splashscreen);

        // 5. Pass a new instance of StartMainActivityRunnable with reference to 'this'.
        mHandler.postDelayed(new StartMainActivityRunnable(this), SPLASH_DISPLAY_LENGTH);
    }

    // 6. Override onDestroy()
    @Override
    public void onDestroy() {
     // 7. Remove any delayed Runnable(s) and prevent them from executing.
     mHandler.removeCallbacksAndMessages(null);

     // 8. Eagerly clear mHandler allocated memory
     mHandler = null;
    }
}

আরও তথ্যের জন্য দয়া করে এই লিঙ্কটি মাধ্যমে যান


7

4 এর 5 এর স্প্ল্যাশ স্ক্রিনে অকারণে থামানো খুব বেশি অর্থবোধ করে না। আপনি যদি পটভূমিতে কোনও কিছু লোড করেন তবে স্প্ল্যাশ স্ক্রিন প্রয়োগ করতে এই পদ্ধতির অনুসরণ করুন: - একটি স্প্ল্যাশ স্ক্রিনটি সঠিক উপায়ে প্রয়োগ করা আপনার কল্পনার চেয়ে কিছুটা আলাদা। আপনার স্প্ল্যাশ ক্রিয়াকলাপে কোনও লেআউট ফাইল স্ফূরণ করার আগে আপনি যে স্প্ল্যাশ দৃশ্যটি দেখছেন তা অবিলম্বে প্রস্তুত হতে হবে।

সুতরাং আপনি কোনও লেআউট ফাইল ব্যবহার করবেন না। পরিবর্তে, আপনার স্প্ল্যাশ স্ক্রিনটির ব্যাকগ্রাউন্ডটিকে ক্রিয়াকলাপের থিমের পটভূমি হিসাবে উল্লেখ করুন। এটি করার জন্য, প্রথমে রেজ / অঙ্কনযোগ্য একটি এক্সএমএল অঙ্কন তৈরি করুন।

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

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

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

</layer-list>

এখানে, আমি একটি ব্যাকগ্রাউন্ড রঙ এবং একটি চিত্র সেট আপ করেছি।

এরপরে, আপনি এটিকে থিমটিতে আপনার স্প্ল্যাশ ক্রিয়াকলাপের পটভূমি হিসাবে সেট করবেন। আপনার স্টাইল.এক্সএমএল ফাইলে নেভিগেট করুন এবং আপনার স্প্ল্যাশ ক্রিয়াকলাপের জন্য একটি নতুন থিম যুক্ত করুন:

<resources>

    <!-- Base application theme. -->
    <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
        <!-- Customize your theme here. -->
    </style>

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

</resources>

আপনার নতুন স্প্ল্যাশ থিমে, আপনার এক্সএমএল অঙ্কনযোগ্যটির জন্য উইন্ডো ব্যাকগ্রাউন্ডের বৈশিষ্ট্যটি সেট করুন। আপনার অ্যান্ড্রয়েড ম্যানিফেস্ট.এক্সএমএলে আপনার স্প্ল্যাশ ক্রিয়াকলাপের থিম হিসাবে এটি কনফিগার করুন:

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

        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>

অবশেষে, স্প্ল্যাশঅ্যাক্টিভিটি ক্লাসটি আপনাকে কেবল আপনার মূল ক্রিয়াকলাপে এগিয়ে পাঠাতে হবে:

     public class SplashActivity extends AppCompatActivity {

             @Override
             protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);

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

আরও বিশদ এটি পড়ুন: 1. https://www.bignerdranch.com/blog/splash-screens-the-right-way/ 2. http://blog.goodbarber.com/3-tips-to-create-a গ্রেট-স্প্ল্যাশ-স্ক্রীন-জন্য-আপনার-মোবাইল-app_a287.html


4

এটি এখানে সম্পূর্ণ কোড

SplashActivity.java

public class SplashActivity extends AppCompatActivity {

private final int SPLASH_DISPLAY_DURATION = 1000;

@Override
public void onCreate(Bundle bundle) {
    super.onCreate(bundle);


    new Handler().postDelayed(new Runnable(){
        @Override
        public void run() {

            Intent mainIntent = new Intent(SplashActivity.this,MainActivity.class);
            SplashActivity.this.startActivity(mainIntent);
            SplashActivity.this.finish();
        }
    }, SPLASH_DISPLAY_DURATION);
}}

অঙ্কনযোগ্যগুলিতে এই bg_splash.xML তৈরি করুন

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

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

<item>
    <bitmap
        android:gravity="center"
        android:src="@drawable/ic_in_app_logo_big"/>
</item></layer-list>

ইন styles.xml একটি কাস্টম থিম তৈরি

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

এবং অবশেষে AndroidManLive.xML এ আপনার ক্রিয়াকলাপে থিমটি নির্দিষ্ট করুন

<activity
        android:name=".activities.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>

চিয়ার্স।


আমি কীভাবে এর পরিবর্তে কোনও এক্সএমএল ফাইল যুক্ত করবdrawable
ভাইপার

আমি বোঝাতে চাইছি উপরের বর্ণনার মতো আপনাকে অঙ্কনযোগ্য ডিরেক্টরিতে bg_splash.xML তৈরি করতে হবে।
awsleiman

4

লেআউট ফাইল থেকে স্প্ল্যাশ স্ক্রিনগুলি লোড করা উচিত নয়, এটি লোড করার সময় কিছুটা পিছিয়ে থাকতে পারে।

সর্বোত্তম উপায় হ'ল আপনার স্প্ল্যাশস্ক্রিনঅ্যাক্টিভিটির জন্য একটি থিম তৈরি করা এবং একটি অঙ্কনীয় রিসোর্সায় সেট the android:windowBackgroundকরা।

https://www.bignerdranch.com/blog/splash-screens-the-right-way/

সংক্ষেপে:

ম্যানিফেস্টে আপনার স্প্ল্যাশস্ক্রিনঅ্যাক্টিভিটি ঘোষণা করুন:

<activity
        android:name=".activities.SplashScreenActivity"
        android:theme="@style/SplashTheme"
        android:screenOrientation="portrait">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

আপনার স্প্ল্যাশস্ক্রিনঅ্যাক্টিভিটি.জভাতে:

@Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

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

}

পরবর্তী আপনার থিমের পটভূমি উইন্ডো জন্য রিসোর্স তৈরি করুন:

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

অঙ্কনযোগ্য ফাইল স্প্ল্যাশ.এক্সএমএল:

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

4

অ্যান্ড্রয়েড মার্শমেলোর পরে , স্প্ল্যাশ স্ক্রিনের অন্যান্য উত্পাদনশীল ব্যবহার আমি আপনার অ্যাপের স্প্ল্যাশ স্ক্রিনে প্রয়োজনীয় অনুরোধAndroid Permissions করছি বলে মনে করি ।

দেখে মনে হচ্ছে বেশিরভাগ অ্যাপ্লিকেশনগুলি এইভাবে অনুমতি অনুরোধটি পরিচালনা করে।

  • কথোপকথনগুলি খারাপ ইউআইএক্স তৈরি করে এবং এগুলি মূল প্রবাহটি ভেঙে দেয় এবং আপনাকে রানটাইম এবং সত্যের বিষয়ে সিদ্ধান্ত নিতে বাধ্য করে যে আপনার অ্যাপ্লিকেশনটি এসডি কার্ডে কিছু লিখতে চায় কিনা তা বেশিরভাগ ব্যবহারকারীরা এমনকি যত্নও করতে পারে না। তাদের মধ্যে কেউ কেউ হয়তো বুঝতেও পারছেন না যে আমরা এটি স্পষ্ট ইংরেজী ভাষায় অনুবাদ না করা পর্যন্ত আমরা কী জানাতে চাইছি।

  • অনুমতিগুলির অনুরোধের সময় প্রতিটি ক্রিয়াকলাপের আগে "অন্যথায়" কম সংখ্যক তৈরি করুন এবং আপনার কোডটিকে বিশৃঙ্খলা মুক্ত দেখায়।

এটি অ্যান্ড্রয়েড ওএস 23+ চালিত ডিভাইসের জন্য আপনার স্প্ল্যাশ ক্রিয়াকলাপে কীভাবে অনুমতি চাইতে পারেন তার একটি উদাহরণ।

যদি সমস্ত অনুমতি দেওয়া হয় বা ইতিমধ্যে মঞ্জুর করা হয়েছে বা প্রি মার্শমালোয় অ্যাপ্লিকেশন চলমান থাকে তবে কেবলমাত্র যান এবং অর্ধ সেকেন্ডের অল্প বিলম্বের সাথে প্রধান বিষয়বস্তু প্রদর্শন করুন যাতে ব্যবহারকারী এই প্রশ্নটি পড়ে এবং আমাদের সেরাটি দেওয়ার চেষ্টা করার জন্য আমরা যে প্রচেষ্টা চালিয়েছি তার প্রশংসা করতে পারে।

import android.Manifest;
import android.annotation.TargetApi;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.os.Build;
import android.os.Bundle;
import android.os.Handler;
import android.support.v7.app.AppCompatActivity;
import android.widget.Toast;

import com.c2h5oh.beer.R;
import com.c2h5oh.beer.utils.Animatrix;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class SplashActivity extends AppCompatActivity {

    final private int REQUEST_CODE_ASK_MULTIPLE_PERMISSIONS = 124;

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

        //show animations 
        Animatrix.scale(findViewById(R.id.title_play), 100);
        Animatrix.scale(findViewById(R.id.title_edit), 100);
        Animatrix.scale(findViewById(R.id.title_record), 100);
        Animatrix.scale(findViewById(R.id.title_share), 100);

        if (Build.VERSION.SDK_INT >= 23) {

            // Marshmallow+ Permission APIs
            fuckMarshMallow();

        } else {

            // Pre-Marshmallow
            ///Display main contents
            displaySplashScreen();
        }
    }

    @Override
    public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
        switch (requestCode) {
            case REQUEST_CODE_ASK_MULTIPLE_PERMISSIONS: {
                Map<String, Integer> perms = new HashMap<String, Integer>();
                // Initial
                perms.put(Manifest.permission.READ_EXTERNAL_STORAGE, PackageManager.PERMISSION_GRANTED);
                perms.put(Manifest.permission.RECORD_AUDIO, PackageManager.PERMISSION_GRANTED);
                perms.put(Manifest.permission.MODIFY_AUDIO_SETTINGS, PackageManager.PERMISSION_GRANTED);
                perms.put(Manifest.permission.VIBRATE, PackageManager.PERMISSION_GRANTED);
                // Fill with results
                for (int i = 0; i < permissions.length; i++)
                    perms.put(permissions[i], grantResults[i]);

                // Check for ACCESS_FINE_LOCATION
                if (perms.get(Manifest.permission.READ_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED
                        && perms.get(Manifest.permission.RECORD_AUDIO) == PackageManager.PERMISSION_GRANTED
                        && perms.get(Manifest.permission.MODIFY_AUDIO_SETTINGS) == PackageManager.PERMISSION_GRANTED
                        && perms.get(Manifest.permission.VIBRATE) == PackageManager.PERMISSION_GRANTED) {
                    // All Permissions Granted

                    // Permission Denied
                    Toast.makeText(SplashActivity.this, "All Permission GRANTED !! Thank You :)", Toast.LENGTH_SHORT)
                            .show();

                    displaySplashScreen();

                } else {
                    // Permission Denied
                    Toast.makeText(SplashActivity.this, "One or More Permissions are DENIED Exiting App :(", Toast.LENGTH_SHORT)
                            .show();

                    finish();
                }
            }
            break;
            default:
                super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        }
    }


    @TargetApi(Build.VERSION_CODES.M)
    private void fuckMarshMallow() {
        List<String> permissionsNeeded = new ArrayList<String>();

        final List<String> permissionsList = new ArrayList<String>();
        if (!addPermission(permissionsList, Manifest.permission.READ_EXTERNAL_STORAGE))
            permissionsNeeded.add("Read SD Card");
        if (!addPermission(permissionsList, Manifest.permission.RECORD_AUDIO))
            permissionsNeeded.add("Record Audio");
        if (!addPermission(permissionsList, Manifest.permission.MODIFY_AUDIO_SETTINGS))
            permissionsNeeded.add("Equilizer");
        if (!addPermission(permissionsList, Manifest.permission.VIBRATE))
            permissionsNeeded.add("Vibrate");

        if (permissionsList.size() > 0) {
            if (permissionsNeeded.size() > 0) {

                // Need Rationale
                String message = "App need access to " + permissionsNeeded.get(0);

                for (int i = 1; i < permissionsNeeded.size(); i++)
                    message = message + ", " + permissionsNeeded.get(i);

                showMessageOKCancel(message,
                        new DialogInterface.OnClickListener() {

                            @Override
                            public void onClick(DialogInterface dialog, int which) {
                                requestPermissions(permissionsList.toArray(new String[permissionsList.size()]),
                                        REQUEST_CODE_ASK_MULTIPLE_PERMISSIONS);
                            }
                        });
                return;
            }
            requestPermissions(permissionsList.toArray(new String[permissionsList.size()]),
                    REQUEST_CODE_ASK_MULTIPLE_PERMISSIONS);
            return;
        }

        Toast.makeText(SplashActivity.this, "No new Permission Required- Launching App .You are Awesome!!", Toast.LENGTH_SHORT)
                .show();

        displaySplashScreen();
    }


    private void showMessageOKCancel(String message, DialogInterface.OnClickListener okListener) {
        new AlertDialog.Builder(SplashActivity.this)
                .setMessage(message)
                .setPositiveButton("OK", okListener)
                .setNegativeButton("Cancel", null)
                .create()
                .show();
    }

    @TargetApi(Build.VERSION_CODES.M)
    private boolean addPermission(List<String> permissionsList, String permission) {

        if (checkSelfPermission(permission) != PackageManager.PERMISSION_GRANTED) {
            permissionsList.add(permission);
            // Check for Rationale Option
            if (!shouldShowRequestPermissionRationale(permission))
                return false;
        }
        return true;
    }

    /**
     * Display main content with little delay just so that user can see
     * efforts I put to make this page
     */
    private void displaySplashScreen() {
        new Handler().postDelayed(new Runnable() {

        /*
         * Showing splash screen with a timer. This will be useful when you
         * want to show case your app logo / company
         */

            @Override
            public void run() {
                startActivity(new Intent(SplashActivity.this, AudioPlayerActivity.class));
                finish();
            }
        }, 500);
    }


}

4

আপনি কোনও লেআউট ফাইল ব্যবহার করবেন না। পরিবর্তে, আপনার স্প্ল্যাশ স্ক্রিনটির ব্যাকগ্রাউন্ডটিকে ক্রিয়াকলাপের থিমের পটভূমি হিসাবে উল্লেখ করুন। এটি করার জন্য, প্রথমে রেজ / অঙ্কনযোগ্য একটি এক্সএমএল অঙ্কন তৈরি করুন।

দ্রষ্টব্য: নীচের সমস্ত কোড গিটহাব লিঙ্ক উপলব্ধ

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

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

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

</layer-list>

এখানে, আমি একটি ব্যাকগ্রাউন্ড রঙ এবং একটি চিত্র সেট আপ করেছি।

এরপরে, আপনি এটিকে থিমটিতে আপনার স্প্ল্যাশ ক্রিয়াকলাপের পটভূমি হিসাবে সেট করবেন। আপনার স্টাইল.এক্সএমএল ফাইলে নেভিগেট করুন এবং আপনার স্প্ল্যাশ ক্রিয়াকলাপের জন্য একটি নতুন থিম যুক্ত করুন:

<resources>

    <!-- Base application theme. -->
    <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
        <!-- Customize your theme here. -->
    </style>

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

</resources>

আপনার নতুন স্প্ল্যাশ থিমে, আপনার এক্সএমএল অঙ্কনযোগ্যটির জন্য উইন্ডো ব্যাকগ্রাউন্ডের বৈশিষ্ট্যটি সেট করুন। আপনার অ্যান্ড্রয়েড ম্যানিফেস্ট.এক্সএমএলে আপনার স্প্ল্যাশ ক্রিয়াকলাপের থিম হিসাবে এটি কনফিগার করুন:

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

        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>

অবশেষে, আপনার স্প্ল্যাশঅ্যাক্টিভিটি ক্লাসটি আপনাকে কেবল আপনার মূল ক্রিয়াকলাপের দিকে এগিয়ে পাঠানো উচিত:

public class SplashActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

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

লক্ষ্য করুন যে আপনি এই স্প্ল্যাশঅ্যাক্টিভিটির জন্য কোনও দৃশ্য সেট আপ করেন না। ভিউ থিম থেকে আসে। আপনি যখন থিমটিতে আপনার স্প্ল্যাশ ক্রিয়াকলাপের জন্য UI সেট আপ করেন, তা অবিলম্বে উপলব্ধ।

আপনার স্প্ল্যাশ ক্রিয়াকলাপের জন্য যদি আপনার কোনও লেআউট ফাইল থাকে, তবে আপনার অ্যাপ্লিকেশন সম্পূর্ণরূপে শুরু হওয়ার পরে সেই লেআউট ফাইলটি ব্যবহারকারীদের কাছে দৃশ্যমান হবে যা খুব দেরিতে। আপনি অ্যাপ্লিকেশন শুরু হওয়ার আগে স্প্ল্যাশটি কেবল সেই অল্প সময়ের মধ্যেই প্রদর্শিত হতে চান।


3
public class MainActivity extends Activity {

@Override

public void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    Thread t=new Thread()
    {

        public void run()
        {   

            try {

                sleep(2000);
                finish();
                Intent cv=new Intent(MainActivity.this,HomeScreen.class/*otherclass*/);
                startActivity(cv);
            } 

            catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    };
    t.start();
}

2

একটি ক্রিয়াকলাপ তৈরি করুন, আসুন আমরা 'এ' নামক ক্রিয়াকলাপ করি, তারপরে একটি স্প্ল্যাশ স্ক্রিন চিত্রটিকে ব্যাকগ্রাউন্ড হিসাবে সেট করে মাইস্ক্রিন.এক্সএমএল নামে একটি এক্সএমএল ফাইল তৈরি করুন এবং তারপরে একটি অ্যাক্টিভিটি থেকে অন্যটিতে নেভিগেট করতে কাউন্ট ডাউন টাইমার ব্যবহার করুন। কাউন্ট ডাউন টাইমার কীভাবে ব্যবহার করবেন তা জানতে আমার এন্ড্রয়েডে টাইমার টাস্ক এই প্রশ্নের উত্তরটি দেখুন ?


2

স্প্ল্যাশ পর্দার উদাহরণ:

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

    }

}

2

স্প্ল্যাশ স্ক্রিনটি অ্যান্ড্রয়েডে কিছুটা অব্যবহৃত অবজেক্ট: মূল ক্রিয়াকলাপ শুরু হওয়ার বিলম্বটি লুকানোর জন্য এটি যত তাড়াতাড়ি সম্ভব লোড করা যায় না। এটি ব্যবহার করার দুটি কারণ রয়েছে: বিজ্ঞাপন এবং নেটওয়ার্ক অপারেশন।

কথোপকথন হিসাবে বাস্তবায়ন স্প্ল্যাশ স্ক্রিন থেকে ক্রিয়াকলাপের প্রধান UI এ দেরি না করে লাফিয়ে তোলে।

public class SplashDialog extends Dialog {
    ImageView splashscreen;
    SplashLoader loader;
    int splashTime = 4000;

    public SplashDialog(Context context, int theme) {
        super(context, theme);
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_splash);
        setCancelable(false);

        new Handler().postDelayed(new Runnable() {
            @Override
            public void run() {
                cancel();
            }
        }, splashTime);

    }
}

লেআউট:

<?xml version="1.0" encoding="utf-8"?>

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="@color/white">

    <ImageView
        android:id="@+id/splashscreen"
        android:layout_width="190dp"
        android:layout_height="190dp"
        android:background="@drawable/whistle"
        android:layout_centerInParent="true" />

</RelativeLayout>

এবং শুরু করুন:

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

        if (getIntent().getCategories() != null &&  getIntent().getCategories().contains("android.intent.category.LAUNCHER")) {
            showSplashScreen();
        }
    }

    protected Dialog splashDialog;
    protected void showSplashScreen() {
        splashDialog = new SplashDialog(this, R.style.SplashScreen);
        splashDialog.show();
    }

    ...
}

এই পদ্ধতির জন্য একজন সুবিধাভোগী রয়েছে এবং এটি হ'ল আপনি সরাসরি মেইনএকটিভিটি চালু করতে পারেন। উদাহরণস্বরূপ আপনি যখন আপনার অ্যাপ্লিকেশনটিতে পুশ বিজ্ঞপ্তি ব্যবহার করেন, আপনি যখন নোটিফিকেশনটিতে ক্লিক করে আপনার অ্যাপ্লিকেশনটিতে লঞ্চ করেন, তখন আপনি এই পদ্ধতিতে আরও ভাল বিজ্ঞপ্তির উদ্দেশ্য পরিচালনা করতে পারেন।
ফার্নাদ তোহিদখাহ

2

কাউন্টডাউনটাইমার ব্যবহার করে আরেকটি পন্থা অর্জন করা যায়

@Override
public void onCreate(Bundle savedInstanceState) {
     super.onCreate(savedInstanceState);
     setContentView(R.layout.splashscreen);

 new CountDownTimer(5000, 1000) { //5 seconds
      public void onTick(long millisUntilFinished) {
          mTextField.setText("seconds remaining: " + millisUntilFinished / 1000);
      }

     public void onFinish() {
          startActivity(new Intent(SplashActivity.this, MainActivity.class));
          finish();
     }

  }.start();
}

2
     - Add in SplashActivity 

   public class SplashActivity extends Activity {

       private ProgressBar progressBar;
       int i=0;
       Context context;
       private GoogleApiClient googleApiClient;

       @Override
       protected void onCreate(Bundle savedInstanceState) {
           super.onCreate(savedInstanceState);
           setContentView(R.layout.activity_splash);
           context = this;

           new Handler().postDelayed(new Runnable() {
               @Override
               public void run() {
                   startActivity(new Intent(Splash.this, LoginActivity.class));
                   finish();
               }
           }, 2000);

       }

   }

  - Add in activity_splash.xml

   <RelativeLayout
   xmlns:android="http://schemas.android.com/apk/res/android"
       xmlns:tools="http://schemas.android.com/tools"
       xmlns:custom="http://schemas.android.com/apk/res-auto"
       android:background="@color/colorAccent"
       android:layout_width="match_parent"
       android:layout_height="match_parent"
       tools:context=".Splash">

       <ImageView
           android:id="@+id/ivLogo"
           android:layout_width="match_parent"
           android:layout_height="match_parent"
           android:src="@mipmap/icon_splash"
           android:layout_centerHorizontal="true"
           android:layout_centerVertical="true"/>


       <ProgressBar
           android:id="@+id/circle_progress"
           style="?android:attr/progressBarStyleHorizontal"
           android:layout_width="fill_parent"
           android:layout_height="wrap_content"
           android:layout_alignParentBottom="true"
           android:layout_marginBottom="5dp"
           android:max="100"
           android:progressTint="@color/green"
           android:visibility="visible" />

   </RelativeLayout>

  - Add in AndroidManifest.xml

    <activity android:name="ex.com.SplashActivity">
               <intent-filter>
                   <action android:name="android.intent.action.MAIN" />

                   <category android:name="android.intent.category.LAUNCHER" />
               </intent-filter>
           </activity>

আপনি কিছু ব্যাখ্যা যোগ করতে পারেন দয়া করে?
রবার্ট

হ্যাঁ নিশ্চিত ... আপনি কী ব্যাখ্যা চান তা দয়া করে আমাকে জানান।
আশীষ কুমার

2

সত্যিই সহজ & gr8 পদ্ধতির:

  • প্রথমে নীচের ওয়েবসাইটটি দিয়ে আপনার স্প্ল্যাশ তৈরি করুন:

    https://www.norio.be/android-feature-graphic-generator/

    আপনার লোগো এবং স্লোগান চয়ন করুন, আপনার সুন্দর পটভূমি চয়ন করুন। এটি 4096x4096 এ আকার দিন।

  • এখন সেই চিত্রটি ডাউনলোড করুন এবং এটিকে আপলোড করুন:

    https://apetools.webprofusion.com/app/#/tools/imagegorilla

    এবং প্রয়োজনীয় সমস্ত স্প্ল্যাশ স্ক্রিন, সমস্ত ডিভাইস, সমস্ত প্ল্যাটফর্ম তৈরি করে।

উপভোগ করুন!

এখানে যথেষ্ট উত্তর রয়েছে যা বাস্তবায়নে সহায়তা করবে। এই পোস্টটি স্প্ল্যাশ স্ক্রিন তৈরির প্রথম ধাপে অন্যকে সহায়তা করার জন্য বোঝানো হয়েছিল!


1

কীভাবে একটি সুপার-নমনীয় লঞ্চ স্ক্রিন যা একই কোড ব্যবহার করতে পারে এবং অ্যান্ড্রয়েড ম্যানিফেস্ট.এক্সএমএল সংজ্ঞায়িত হয়েছে, তাই কোডটি কখনই পরিবর্তন করার প্রয়োজন হবে না। আমি সাধারণত কোডের লাইব্রেরিগুলি বিকাশ করি এবং কোডটি কাস্টমাইজ করা পছন্দ করি না কারণ এটি মলা।

<activity
        android:name=".SplashActivity">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
        <meta-data android:name="launch_class" android:value="com.mypackage.MyFirstActivity" />
        <meta-data android:name="duration" android:value="5000" />
</activity>

তারপরে স্পেন্টএক্টিভিটি নিজেই "লঞ্চ_ক্লাস" এর জন্য মেটা-ডেটা সন্ধান করে তারপরে নিজেই উদ্দীপনা তৈরি করতে। মেটা ডেটা "সময়কাল" স্প্ল্যাশ স্ক্রিনটি কতক্ষণ ধরে থাকে তা সংজ্ঞায়িত করে।

public class SplashActivity extends Activity {

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle icicle) {
    super.onCreate(icicle);
    setContentView(R.layout.activity_splash);

    ComponentName componentName = new ComponentName(this, this.getClass());

    try {
        Bundle bundle = null;
        bundle = getPackageManager().getActivityInfo(componentName, PackageManager.GET_META_DATA).metaData;
        String launch_class = bundle.getString("launch_class");
        //default of 2 seconds, otherwise defined in manifest
        int duration = bundle.getInt("duration", 2000);

        if(launch_class != null) {
            try {
                final Class<?> c = Class.forName(launch_class);

                new Handler().postDelayed(new Runnable() {
                    @Override
                    public void run() {
                        Intent intent = new Intent(SplashActivity.this, c);
                        startActivity(intent);
                        finish();
                    }
                }, duration);

            } catch (ClassNotFoundException e) {
                e.printStackTrace();
            }
        }
    } catch (PackageManager.NameNotFoundException e) {
        e.printStackTrace();
    }
  }
}

1

কিছুদিন ব্যবহারকারী খুলুন SplashActivityএবং অবিলম্বে প্রস্থান কিন্তু অ্যাপ্লিকেশন এখনও যেতে MainActivityপরে SPLASH_SCREEN_DISPLAY_LENGTH

এটি প্রতিরোধের জন্য: SplashActivityআপনার চেক করা উচিত SplashActivityআগে যাওয়ার আগে শেষ হচ্ছে কিনাMainActivity

public class SplashActivity extends Activity {

    private final int SPLASH_SCREEN_DISPLAY_LENGTH = 2000;

    @Override
    public void onCreate(Bundle icicle) {
        ...
        new Handler().postDelayed(new Runnable() {
            @Override
            public void run() {

                if (!isFinishing()) {//isFinishing(): If the activity is finishing, returns true; else returns false.
                    startActivity(new Intent(SplashActivity.this, MainActivity.class));
                    finish();
                }

            }, SPLASH_SCREEN_DISPLAY_LENGTH);
        }                             
   }                                
}

এই সাহায্য আশা করি


1

যদিও ভাল উত্তর আছে, আমি গুগল প্রস্তাবিত উপায় প্রদর্শন করব:

1) প্রথমে Themeস্প্ল্যাশ স্ক্রিনের জন্য একটি তৈরি করুন: আপনার কাছে একটি থিম বলা হয়েছে splashscreenTheme, আপনার প্রবর্তক থিমটি হ'ল:

<style name="splashscreenTheme">
  <item name="android:windowBackground">@drawable/launch_screen</item>
</style>

বিঃদ্রঃ:

android:windowBackgroundইতিমধ্যে আপনার স্প্ল্যাশস্ক্রিন চিত্রটি
আবার ইউআইতে করার দরকার নেই ।

আপনি এখানে অঙ্কনযোগ্য পরিবর্তে রঙ ব্যবহার করতে পারেন।

2) স্প্ল্যাশস্ক্রিনঅ্যাক্টিভিটি প্রকাশের জন্য থিমটি সেট করুন

   <activity
            android:name=".activity.splashscreenActivity"
            android:screenOrientation="portrait"
            android:theme="@style/splashscreenTheme">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

3) নিশ্চিত করুন যে আপনি launch_screen drawableনা হয় drawableফোল্ডারের যদি আপনার ইমেজ ছোট নয়।

এটি দ্রুত প্রবর্তন স্ক্রিন আরম্ভ করবে এবং আপনাকে কালো পর্দা থেকে বাঁচাবে

এটি অতিরিক্ত ওভারড্রও এড়িয়ে যায়


1

এটি আমি স্প্ল্যাশ স্ক্রিনে দেখা সেরা পোস্ট: http://saulmm.github.io/avoding-android-cold-starts

সল মোলিনেরো স্প্ল্যাশ স্ক্রিনগুলির জন্য দুটি পৃথক বিকল্পে চলেছে: আপনার প্রাথমিক পর্দায় সঞ্চারিত করার জন্য উইন্ডো ব্যাকগ্রাউন্ডের সুবিধা গ্রহণ করা এবং স্থানধারক UI প্রদর্শন করা (যা এই দিনগুলিতে গুগল তাদের অ্যাপগুলির বেশিরভাগ জন্য ব্যবহার করে এমন একটি জনপ্রিয় পছন্দ)।

আমি দীর্ঘ সময় শুরুর বারের কারণে শীতল শুরুর সময় বিবেচনা করা এবং ব্যবহারকারীর ড্রপঅফ এড়ানো প্রয়োজন হিসাবে এই পোস্টটি উল্লেখ করি।

আশাকরি এটা সাহায্য করবে!


1

আমার ক্ষেত্রে আমি কেবল 2 সেকেন্ডের জন্য একটি চিত্র দেখানোর জন্য একটি নতুন ক্রিয়াকলাপ তৈরি করতে চাইনি। আমার শুরু করার সময় MainAvtivity, চিত্রগুলি পিকাসো ব্যবহার করে ধারকগুলিতে লোড হয়ে যায়, আমি জানি যে এটি লোড হতে প্রায় 1 সেকেন্ড সময় নেয় তাই আমি আমার মেইনএকটিভিটির ভিতরে নিম্নলিখিতটি করার সিদ্ধান্ত নিয়েছি OnCreate:

splashImage = (ImageView) findViewById(R.id.spllll);

    this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);

    int secondsDelayed = 1;
    new Handler().postDelayed(new Runnable() {
        public void run() {
            getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
            splashImage.setVisibility(View.GONE);

        }
    }, secondsDelayed * 2000);

অ্যাপ্লিকেশনটি শুরু করার সময় প্রথম জিনিসটি ঘটে যা হ'ল ImageViewপ্রদর্শিত হয় এবং স্ট্যাটাসবারটি পুরো স্ক্রিনে উইন্ডোগুলি পতাকা সেট করে মুছে ফেলা হয়। তারপর আমি একটি ব্যবহৃত Handler, 2 সেকেন্ডের জন্য চালানোর জন্য 2 সেকেন্ডের পর আমি পূর্ণ পর্দায় পতাকা পরিষ্কার এবং দৃশ্যমানতা সেট ImageViewকরতে GONE। সহজ, সহজ, কার্যকর


1

অ্যান্ড্রয়েডে এটি সত্যিই সহজ আমরা স্প্ল্যাশ স্ক্রিন বাস্তবায়নের জন্য হ্যান্ডলার ধারণাটি ব্যবহার করি

আপনার স্প্ল্যাশস্ক্রিন্টিভিটি জাভা ফাইলটিতে এই কোডটি পেস্ট করুন।

আপনার স্প্ল্যাশস্ক্রিনঅ্যাক্টিভিটি এক্সএমএল ফাইলে চিত্রের ভিউ ব্যবহার করে যে কোনও ছবি রাখুন।

public void LoadScreen() {
        final Handler handler = new Handler();
        handler.postDelayed(new Runnable() {
            @Override
            public void run() {                 
                Intent i = new Intent(SplashScreenActivity.this, AgilanbuGameOptionsActivity.class);
                startActivity(i);
            }
        }, 2000);
    }

1

আপনি এটি আপনার অনক্রিয়া পদ্ধতিতে যুক্ত করতে পারেন

new Handler().postDelayed(new Runnable() {
                @Override
                public void run() {
                    // going to next activity
                    Intent i=new Intent(SplashScreenActivity.this,MainActivity.class);
                    startActivity(i);
                    finish();
                }
            },time);

এবং আপনার সময়ের হিসাবে মিলি সেকেন্ডে আপনার সময় মানটি আরম্ভ করুন ...

private  static int time=5000;

আরও তথ্যের জন্য এই লিঙ্ক থেকে সম্পূর্ণ কোড ডাউনলোড করুন ...

https://github.com/Mr-Perfectt/Splash-Screen


1

কোটলিনে এই কোডটি লিখুন: -

 Handler().postDelayed({
            val mainIntent = Intent(this@SplashActivity, LoginActivity::class.java)
            startActivity(mainIntent)
            finish()
        }, 500)

আশা করি এটি আপনাকে সাহায্য করবে। ধন্যবাদ ........


0

সাধারণ কোড, এটি কাজ করে :) সাধারণ স্প্ল্যাশ

int secondsDelayed = 1;
    new Handler().postDelayed(new Runnable() {
        public void run() {
            startActivity(new Intent(LoginSuccessFull.this, LoginActivity.class));
            finish();
        }
    }, secondsDelayed * 1500);

0
public class SplashActivity extends Activity {

  Context ctx;

  @Override
  protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      ctx = this;
      setContentView(R.layout.activity_splash);

      Thread thread = new Thread(){
          public void run(){
              try {
                  sleep(3000);
              } catch (InterruptedException e) {
                  e.printStackTrace();
              }

              Intent in = new Intent(ctx,MainActivity.class);
              startActivity(in);
              finish();
          }
      };
      thread.start();
  }
}

এটি একটি খারাপ উদাহরণ - আপনি পিছনে টিপে স্প্ল্যাশঅ্যাক্টিভিটি থেকে প্রস্থান করলে কী হবে? থ্রেডটি এখনও কার্যকর করা হবে।
মার্ক কেইন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.