Android: Create Splash Screen


Create Splash Screen

ก่อนหน้านี้เราได้ทำ Splash Screen บน iPhone กันแล้วนะครับ จากบทความ iPhone: Creating a Splash Screen วันนี้เรามาลองทำ splash screen บนแอนดรอย กันดีกว่า โดยผมเตรียมรูป splash screen เอาไว้แล้ว (ภาพด้านซ้าย splash_screen.png) ส่วนโปรแกรมนั้นก้อเป็นโปรแกรมไหนของเราก็ได้ครับ เพราะไม่มีผลกระทบอะไรกับโปรแกรมของเรา (ในตัวอย่างของผมจะเป็นภาพด้านขวาครับ)

ขั้นตอนเริ่มจากการสร้าง Activity ใหม่ที่จะเอาไว้เป็น Splash Screen ของเรา

1) สร้าง Activity: MySplashScreen

2) ในไฟล์ Manifest.xml เปลี่ยน Main Activity ให้เป็น Activity ที่เราพึ่งสร้างใหม่ (MySplashScreen)


สังเกตุบรรทัดที่ 9 ผมเปลี่ยนจาก .Main (Main Activity ที่กำหนดตอนสร้างโปรเจค) เป็น .MySplashScreen แทน และเพิ่ม activity tag ที่เป็นของ Main Activity ในบรรทัดที่ 17 การทำทั้งสองอย่างเพื่อให้หน้าMySplashScreen นั้นขึ้นมาแสดงก่อนหน้า Main

3) มาที่โค้ดไฟล์ splashscreen.xml ใส่ ImageView เข้าไปพร้อมกับภาพที่เราต้องการให้เป็น splash screen นะครับ

ไฟล์รูปภาพของผมเพิ่มเข้าไปใน tag <ImageView android:src=”@drawable/splash_screen” ภาพ splash screen ของผมเอง

4) มาที่โค้ดไฟล์ MySplashScreen.java ในส่วนนี้เราจะเขียน ปรับให้เป็น full screen และset layout, กำหนดระยะเวลาการแสดงภาพ splash screen และการเปลี่ยนหน้าไปยัง Main Activity

4.1) set full screen และทำให้อยู่ในแนวตั้ง ใช้ฟังก์ชั่น

requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
                     WindowManager.LayoutParams.FLAG_FULLSCREEN);
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

set layout ให้เป็นเลเอาท์ของไฟล์ splashscreen.xml โดยใช้ฟังก์ชั่น

setContentView(R.layout.splashscreen);

4.2) กำหนดระยะเวลาการแสดงผล splash screen และเขียน Thread เพื่อแสดงภาพ splash screen

ทำความเข้าใจเกี่ยวกับการสร้าง splash screen ในแอนดรอยกันสักนิดนึง คือว่าการแสดงภาพ splash screen ขึ้นมานั้นเราใช้ Thread เป็นตัวกำหนด ระยะเวลาในการแสดง หากหมดเวลาที่เรากำหนดเอาไว้แล้ว ก็จะไปยังหน้า Main Activity

การกำหนดระยะเวลาของผม กำหนดในหน่วย millisecond และใช้ฟังก์ชั่น System.currentTimeMillis() เป็นตัวเช็คว่าครบเวลาแล้วหรือยัง?

code: ในฟังก์ชั่น public void onCreate(Bundle bundle){…}

ตัวแปรกำหนดระยะเวลาและเงื่อนไขการวนลูป

private final int delayTime = 3000;//3 second
private boolean endDelay = false;

เขียนโค้ดใส่ Thread เพื่อกำหนดการแสดงผลของหน้า splash screen

//show splash screen
Thread showsps = new Thread(){
   private long beginTime;
   public void run() {
      beginTime = System.currentTimeMillis();
      while(!endDelay){
         try {
             Thread.sleep(100);
         } catch (InterruptedException e) {
             // TODO Auto-generated catch block
             e.printStackTrace();
         }
         endDelay = System.currentTimeMillis()-beginTime >= delayTime;
      }
      //if end time go to Main page
      Intent intent = new Intent(MySplashScreen.this,Main.class);
      MySplashScreen.this.startActivity(intent);
   };
};
showsps.start();

4.3) หากต้องการให้เวลากดที่หน้า splash screen แล้วไปที่หน้าMain Activity เลยไม่ต้องรอ

code: ในฟังก์ชั่น public void onCreate(Bundle bundle){…} ต่อจากโค้ดของ Thread

LinearLayout ll = (LinearLayout)findViewById(R.id.spsc_layout);
ll.setOnClickListener(this);

setOnClickListener ให้กับ LinearLayout ของ splash screen (โดย default แล้ว LinearLayout ที่มาตอนสร้าง xml จะไม่มี id ให้เราต้องเพิ่มเองครับ โดยเพิ่ม android:id = “@+id/spsc_layout” เข้าไปใน tag LinearLayout)

ในคลาส MySplashScreen.java ให้ implements OnClickListener และ เพิ่มฟังก์ชั่น public void onClick(View v){…} เข้าไปด้วย

code:

@Override
public void onClick(View v) {
   // TODO Auto-generated method stub
   endDelay = true;
}

เท่านี้ก็เป็นอันเรียบร้อยแล้วครับ ผลการรันโปรแกรม หน้า splashscreen จะแสดงตามระยะเวลาที่เรากำหนดและจะเปลี่ยนไปหน้า MainActivity โดยอัตโนมัติ แต่หากเรากดที่หน้า splashscreen ก่อนหมดเวลา โปรแกรมก็จะเปลี่ยนไปหน้า MainActivity โดยอัตโนมัติเช่นกัน

บทความที่เกี่ยวข้อง

Reference

adaydesign :)

About adaydesign

นักพัฒนาแอพพลิเคชั่นบนโมบาย [iPhone Android] คนหนึ่งซึ่งอยากจะบันทึกเรื่องราวของเส้นทางนักพัฒนาโมบายแอพพลิเคชั่นเอาไว้ในบล็อคน้อยๆ แห่งนี้ เผื่อจะแบ่งบันและแลกเปลี่ยนความรู้ให้กับคนอื่นๆ ได้บ้าง :) Mobile Application Developer; Flash Mobile, iPhone/iPad, Android Mobile Phone/Tablet and Blackberry Playbook.

Posted on เมษายน 6, 2011, in [Dev] Android and tagged , , . Bookmark the permalink. ใส่ความเห็น.

ใส่ความเห็น

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / เปลี่ยนแปลง )

Twitter picture

You are commenting using your Twitter account. Log Out / เปลี่ยนแปลง )

Facebook photo

You are commenting using your Facebook account. Log Out / เปลี่ยนแปลง )

Google+ photo

You are commenting using your Google+ account. Log Out / เปลี่ยนแปลง )

Connecting to %s

%d bloggers like this: