close
  • 홈
  • :
  • 위치로그
  • :
  • 태그
  • :
  • 방명록
  • :
  • 관리자
  • :
  • 새글쓰기
블로그 이미지

이슬나라 [isulnara.com]
프로그램 관련 문의...
전체 (208)
자작 프로그램 (24)
EzIP (3)
IEPageSetup (3)
iSysInfoX (2)
메신저 알림이 (1)
ezSVC (1)
WebFTP (2)
iDebugX (1)
기타 (10)
버그 신고 (1)
이것저것.. (55)
WebFTP 게시판 (0)
팁 모음 (77)
linux (21)
프로그래밍 (36)
윈도우 (5)
네크워크 (7)
기타 (7)
윈도우 숨은.. (4)
터미널 서비스.. (1)
공개 웹하드 (1)
관리자 (0)
PC 원격제어.. (1)
NAS (43)
«   2012/05   »
일 월 화 수 목 금 토
    1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31    
텍스트큐브 hosts.deny sqlite WebFTP max_allowed_packet 류종택 JDBC location.href 블록 xbmc 한글 ProxyPass ds107 델파이 msn 알림이 공유기 sms 콘솔프로그램 WDN-2000 330 태터툴즈 mysql Pixels AjaXplorer vnc ezIP rss ezlink cue putty
[ezLink] 동시 접속수...
ezLink 1.2.1.2 정식... (5)
MD5 CRC 체크섬.
Apache, Subversion...
CentOS에 MongoDB 설치.
안녕하세요.. 알려주신...
isul / 05/15
너무 좋은 프로그램 잘...
김진수 / 05/12
직접 해결하셨네요.. 다...
isul / 05/01
var winOpen = window.op...
Mulgom / 04/30
이슬님 덕에 무난하게 출...
Mulgom / 04/30
black hat software.
black hat software / 04/25
일반 어플리케이션을 서...
ㅇㅇ/ / 2009
사이코웨어 : nProtect,...
√ MIRiyA's AstraLog / 2008
웹페이지에서 인쇄시 머...
醉生夢死™ / 2006
웹페이지에서 MAC Addres...
날자~!! 날어~!! / 2005
 최근글 목록
 2011/11 [2]
 2011/10 [3]
 2011/09 [1]
 2011/07 [3]
 2011/06 [1]
넷하드 - NAS 카페
무료 원격제어 프로그램
블로그가 뭥미?
솔라리스 테크넷
스티브 맥코넬
시놀로지 NAS 카페
하얀나무 - 캠핑 전문 쇼핑몰
하얀나무's Story
Total of
482282 visitors
Today 116
Yesterday 196
 
글검색결과[로딩] : 1
2010/08/24  [안드로이드] 스플래시(로딩) 화면 띄우기 (36)
     
 팁 모음/프로그래밍 
[안드로이드] 스플래시(로딩) 화면 띄우기
Posted on 2010/08/24 18:07
 
 
 
 
안드로이드(android) 앱이 실행되면서 스플래시(splash, 로딩) 화면을 띄우는 소스입니다.

여러가지 방법이 있겠지만 제가 사용하는 방법은 아래와 같습니다.

AndroidManifest.xml
<!-- 메인 액티비티 -->
<activity android:name="MainActivity" android:label="@string/app_name">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
</activity>
       
<!-- 스플래시(로딩) 액티비티 -->
<activity android:name="SplashActivity"/>

MainActivity .java
public class MainActivity extends Activity
{
    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        // 스플래시 화면 띄우기
        startActivity(new Intent(this, SplashActivity.class));

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

        initialize();  // 시간이 걸리는 작업 처리
    }

    /**
     * 스플래시 표시하는 것과 초기화를 동시에 진행시키기 위하여 쓰레드 처리
     *
     */
    private void initialize()
    {
        InitializationRunnable init = new InitializationRunnable();
        new Thread(init).start();
    }


    /**
     * 초기화 작업 처리
     *
     */
    class InitializationRunnable implements Runnable
    {
        public void run()
        {
            // 여기서부터 초기화 작업 처리
            // do_something
        }
    }
}

SplashActivity.java
public class SplashActivity extends Activity
{
    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.splash);

        initialize();
    }

    private void initialize()
    {
        Handler handler =    new Handler()
                                     {
                                         @Override
                                         public void handleMessage(Message msg)
                                         {
                                             finish();    // 액티비티 종료
                                         }
                                     };

        handler.sendEmptyMessageDelayed(0, 3000);    // ms, 3초후 종료시킴
    }
}


* 화면을 가로/세로 모드로 전환할 경우 스플래쉬 액티비티가 보이는 문제가 발생할 경우 대처
- 여러가지 방법이 있겠지만 아래처럼 처리하면 됩니다.(2010/10/27 추가)

AndroidManifest.xml
<!-- 메인 액티비티 -->
<activity android:name="MainActivity" android:label="@string/app_name" android:configChanges="keyboardHidden|orientation">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
</activity>

<!-- 스플래시(로딩) 액티비티 -->
<activity android:name="SplashActivity"/>
예제 다운로드:
SplashDemo.zip

Creative Commons License
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-변경금지 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.
이올린에 북마크하기(0) 이올린에 추천하기(0)
android, splash, 로딩, 스플래시, 안드로이드
Trackback [0] : Comment [36]
TrackbackAddress
http://isulnara.com/tt/trackback/227
BlogIcon slog2 수정/삭제 답변하기
2010/10/27 17:31
화면 rotation시에 계속 스플래쉬 액티비티가 보이는 문제가 있네요..
BlogIcon isul 수정/삭제
2010/10/27 17:53
본문에 처리 방안 관련하여 내용 추가하였습니다.
고맙습니다.
BlogIcon 녹차 수정/삭제 답변하기
2010/11/01 21:23
큰 도움 됐습니다. FLAG를 이용해서 어찌할까 생각해봤는데 이 방법이 훨씬 간단하네요 ^^
BlogIcon isul 수정/삭제
2010/11/02 01:20
도움이 되었다니 저도 기쁩니다^^
BlogIcon 애니 수정/삭제 답변하기
2010/11/24 10:03
와우~^^ 감사합니다.
막 어제밤에 삽질하고 있었는데.. 이런방법이 있군요^^
감사합니다. ^^ 자주 놀러와야겟네여 ㅎㅎ
BlogIcon isul 수정/삭제
2010/11/24 23:44
안드로이드 관련 팁은 달랑 이거 하나 밖에 없네요^^
lemon 수정/삭제 답변하기
2011/02/22 14:55
시작부터 감이 좋습니다 ^^.. 착한 자료 감사합니다//
대학생 수정/삭제 답변하기
2011/03/22 23:51
어떻게 하는지 잘모르겠어요 ㅠ 관련예제 하나 올려주시면 안될까여? ㅠㅠ 전체 소스로요
BlogIcon isul 수정/삭제
2011/03/24 00:36
위에 있는 소스는 완전한 프로젝트 파일은 아니지만 필요한 부분은 다 나와 있습니다.
이 소스와 관계없이 일단 액티비티 두 개 있는 앱을 하나 만들어 보시면 어떻게 적용해야 될지 감이 올거라 생각됩니다.
루지메이앙 수정/삭제 답변하기
2011/04/08 20:17
이렇게 하는거랑 로딩화면 부터 띄우고 x초시 이동시키는거랑 다른점이 있나요?;;
BlogIcon isul 수정/삭제
2011/04/09 13:12
이렇게 하면 로딩 화면이 표시되는 동안에 특정 작업을 할 수 있습니다.
예를 들면 로딩에 시간이 걸리는 작업이 있을 경우 스플래시 화면이 표시되는 동안에 처리하는 거죠..
그리고, 또 다른 점은 시작 액티비티가 다르다는 것이죠..
로딩 화면 후 이동시키는 방식은 이동된 액티비티에서 뒤로 가기 버튼을 누르면 로딩 화면으로 돌아오게 되겠죠.. 이런 현상을 방지하려면 또 뭔가 작업을 해줘야 되겠구요..
루지메이앙 수정/삭제
2011/04/11 22:29
흠... 로딩화면부터 띄우는 거랑 같은 것 같은데..

SplashActivity 먼저 띄우고 3초뒤 MainActivity를

StartActivity 하면서 finish 하는 것과 동일해 보이네요 ^^;;
BlogIcon isul 수정/삭제
2011/04/11 23:29
일반적으로 사용하는데는 크게 차이가 없습니다...
편한 방법으로 사용하면 됩니다.
말씀하신 방법으로 할 경우에는 MainActivity에서 어떤 작업을 시키고자 할 경우 앱 실행 후 3초 후부터 가능하겠죠..
민이 수정/삭제 답변하기
2011/05/04 13:42
로딩문제 때문에 다양한 방법을 써봤는데 이게 가장 깔끔하고 좋은것 같네요
덕분에 한시름 덜게 된듯합니다. ㅎㅎ 유용한 정보 감사드립니다.
BlogIcon isul 수정/삭제
2011/05/09 00:17
도움이 되었다니 저도 기쁩니다.
^_____________^
환이 수정/삭제 답변하기
2011/06/06 22:54
질문있습니다 이 방법처럼 해서 잘되는데 문제는 어플을 종료후 다시 에뮬레이터로 마우스 클릭으로 실행을하니
Application is not installed on your phone 이렇게 뜨면서 실행이 안됩니다
근데 또 에뮬 다시켜서 자동실행 되도록 나두면 또 실행은 되구요 왜이런 현상이 생기나요...해결방법좀 알려주세요 ㅠㅠ
BlogIcon isul 수정/삭제
2011/06/07 09:14
구성하신 AndroidManifest.xml과 스플래시 화면 띄우는 부분의 소스를 올려주시면 확인해겠습니다.
설치된 앱을 삭제한 후에 다시 테스트 해보아도 동일한 문제가 발생하는지요?
수정/삭제 답변하기
2011/06/07 13:40
관리자만 볼 수 있는 댓글입니다.
환이 수정/삭제 답변하기
2011/06/07 13:42
이건 spl.java 소스입니다

package kr.ac.ys;

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

public class spl extends Activity{
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.spll);
Handler z = new Handler();
z.postDelayed(new splashhandler(), 5000);

}
class splashhandler implements Runnable{
public void run(){
startActivity(
new Intent(getApplication(),Main.class));
spl.this.finish();
}
}
}

이건 Main.java 소스입니다
package kr.ac.ys;

import android.app.Activity;
import android.content.Intent;
import android.graphics.drawable.AnimationDrawable;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
public class Main extends Activity {
AnimationDrawable frameAnimation;

public void onWindowFocusChanged(boolean hasFocus) {
if(hasFocus) frameAnimation.start();
}

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

ImageView imgView = (ImageView) findViewById(R.id.animationImage);
imgView.setVisibility(ImageView.VISIBLE);
imgView.setBackgroundResource(R.anim.simple_animation);
frameAnimation = (AnimationDrawable) imgView.getBackground();

//frameAnimation.stop();

Button b = (Button) findViewById(R.id.button3);
Button e = (Button) findViewById(R.id.button2);
Button f = (Button) findViewById(R.id.button1);
Button g = (Button) findViewById(R.id.button4);
Button h = (Button) findViewById(R.id.button5);

e.setOnClickListener(new Button.OnClickListener() {
public void onClick(View v) {
Intent intent = new Intent(Main.this, help.class);
startActivity(intent);
overridePendingTransition(R.anim.fade, R.anim.hold);
finish();
}
});
f.setOnClickListener(new Button.OnClickListener() {
public void onClick(View v) {
Intent intent = new Intent(Main.this, DB1.class);
startActivity(intent);
overridePendingTransition(R.anim.fade, R.anim.hold);
finish();
}
});
g.setOnClickListener(new Button.OnClickListener() {
public void onClick(View v) {
Intent intent = new Intent(Main.this, sang.class);
startActivity(intent);
overridePendingTransition(R.anim.fade, R.anim.hold);
finish();
}
});


b.setOnClickListener(new Button.OnClickListener() {
public void onClick(View v) {
Intent intent = new Intent(Main.this, option.class);
startActivity(intent);
overridePendingTransition(R.anim.fade, R.anim.hold);
finish();
}
});
h.setOnClickListener(new Button.OnClickListener() {
public void onClick(View v) {
finish();
}
});

}

}

Main manifest소스입니다
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="kr.ac.ys"
android:versionCode="1"
android:versionName="1.0">
<uses-sdk android:minSdkVersion="10" />

<application android:icon="@drawable/icon" android:label="@string/app_name">
<activity android:name=".spl"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name="option"></activity>
<activity android:name="help"></activity>
<activity android:name="DB1"></activity>
<activity android:name="sang"></activity>
<activity android:name="spl"></activity>
<activity android:name="Main"></activity>


</application>
</manifest>

해결방법좀 알려주세요 에뮬상에서 어플 지웠다가 다시해도 안되네요 ㅠㅠ
BlogIcon isul 수정/삭제
2011/06/08 01:13
남겨주신 코드 상에는 별 문제가 없는 거 같습니다.
spl 클래스만 있으면 실행에는 문제가 없어야 되는데요..
저도 원인을 모르겠네요.
주희 수정/삭제 답변하기
2011/06/07 14:28
안드로이드 사진 하나로 움직이게 하고싶거든요
하고싶은건 새(사진)가 왼쪽에서 오른쪽으로 계속 반복되며 움직이게 하고싶은데
전혀 초보라 구현 방법을 모르겠네요............ㅠㅠ
BlogIcon isul 수정/삭제
2011/06/07 14:34
정확히 어떤 것을 원하시는지 모르겠네요..
일반적으로 특정 객체를 움직일 때는 Animation을 이용하면 편리합니다.
이동에는 TransitionAnimation 클래스를 이용하면 되겠네요.
Animation으로 원하는 것이 안될 경우에는 Canvas에 직접 그려야 되겠죠..
어렵다 수정/삭제 답변하기
2011/06/07 14:43
텍스트입력 창을 띄워서 거기에 값을 넣으면 디비에 저장하고 싶은데
텍스트 입력 창 띄우는 방법 좁 알려주세요!
BlogIcon isul 수정/삭제
2011/06/08 01:18
간단한 입력 창은 AlertDialog에 EditText 하나 올리면 되구요.
AlertDialog.Builder alert = new AlertDialog.Builder(context);
alert.setView(editText);
AlertDialog로 검색해보세요. 많이 나옵니다.

좀 복잡하다면 그냥 Layout 구성해서 Activity 하나 만드는 게 좋겠죠..
ch 수정/삭제 답변하기
2011/07/05 23:57
시간걸리는 작업 처리하는 부분에서 오래걸리는 작업을 수행하면, 그 작업을 전부 수행할 때 까지 로딩화면을 안띄우다가, 다 끝나고 나서야 로딩화면을 띄우고, 3초 후에 메인화면을 띄우네요.... 또 화면을 돌리면 다시 로딩화면부터하구요.. 왜그런가요?
BlogIcon isul 수정/삭제
2011/07/06 10:14
위에 설명을 수정하였습니다.
초기화 작업을 위해서는 쓰레드처리를 해야 됩니다.
처음 글 작성 시 이 부분을 언급하려다 귀찮아서 안했습니다.
화면 돌리면 다시 로딩되는 부분은 글 마지막 부분의 AndroidManifest.xml 부분을 다시 확인해보세요.

예제 프로젝트도 첨부하였습니다.
강식 수정/삭제 답변하기
2011/08/17 00:23
인트로띄우고나서 로그인띄우려고 합니다.
handleMessage부분에 fisnish()하고 startActivity(로그인)했거든요.
별 이상은 없는데, 인트로뜨고 로그인뜨기전에 바로 백버튼눌러서 종료했는데
2초후에 로그인이 뜨네요. 이러면안될것같은데요.
이처럼 액티비티들의 실행을 보통 어떻게 구현을 하나요?
BlogIcon isul 수정/삭제
2011/08/17 22:32
인트로 액티비티에서 백버튼 누르는 것을 검사하여 무시하도록 하거나, 백버튼 눌렀을 경우 특정 변수 값을 설정하여 startActivity(로그인)이 호출되지 않도록 처리하면 될것 같습니다.
챙이 수정/삭제 답변하기
2011/12/03 15:31
유용한글 감사합니다. 인토로가 1개가 아니고 2개인 경우에는 어떻게 하나요?
지금 알려주신 방법은 인트로에서 메인화면으로 넘어가는 방법인데 제가 하고싶은 방법은 인트로1에서 인토로2로 넘어가고 다시 인트로2에서 메인으로 넘어가는걸 원하는데 어떻게하는게 좋을까요?
BlogIcon isul 수정/삭제
2011/12/03 23:12
SplashActivity.java의 handleMessage() 부분에서
finish() 하기 전에 두 번째 인트로 액티비티를 띄우면 되겠죠..
두 번째 인트로 액티비티는 첫 번째 인트로인 SplashActivity와 동일하게 하면 되겠죠..
소소창 수정/삭제 답변하기
2011/12/06 20:13
블로그에 댓글 잘 안남기는데.. 너무나 깔끔한 자료에 감사한 마음 갖고 갑니다 ^^
BlogIcon isul 수정/삭제
2011/12/07 00:35
예.. 고맙습니다^^
류작가 수정/삭제 답변하기
2012/01/19 21:28
샘플소스 깔금하게 잘보고갑니다. 그런데 동영상파일로 로딩은 불가능 한건가요?
BlogIcon isul 수정/삭제
2012/01/20 13:23
시도해보지는 않았지만 SplashActivity에 동영상 플레이어 구현하면 문제 없을 거 같은데요..
june 수정/삭제 답변하기
2012/02/06 13:18
소스 그대로 사용했는데 처음 켜자마자 force close 뜨네요.
nullpointerException이라는데 저같은분 안계신가요? 잘 안되서 힘드네요 ㅠ
BlogIcon isul 수정/삭제
2012/02/07 22:51
프로젝트 클린한 다음에 다시 해보세요..
아직까지 문제 있다는 얘기는 못 들어봤습니다.
어느 라인에서 에러가 발생하는지 알려주시지 않아서.. 도움을 드릴 수가 없네요..
SecretComment
  1