public class MainActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main);
/** * 스플래시 표시하는 것과 초기화를 동시에 진행시키기 위하여 쓰레드 처리 * */ 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(); // 액티비티 종료 } };
이렇게 하면 로딩 화면이 표시되는 동안에 특정 작업을 할 수 있습니다.
예를 들면 로딩에 시간이 걸리는 작업이 있을 경우 스플래시 화면이 표시되는 동안에 처리하는 거죠..
그리고, 또 다른 점은 시작 액티비티가 다르다는 것이죠..
로딩 화면 후 이동시키는 방식은 이동된 액티비티에서 뒤로 가기 버튼을 누르면 로딩 화면으로 돌아오게 되겠죠.. 이런 현상을 방지하려면 또 뭔가 작업을 해줘야 되겠구요..
질문있습니다 이 방법처럼 해서 잘되는데 문제는 어플을 종료후 다시 에뮬레이터로 마우스 클릭으로 실행을하니
Application is not installed on your phone 이렇게 뜨면서 실행이 안됩니다
근데 또 에뮬 다시켜서 자동실행 되도록 나두면 또 실행은 되구요 왜이런 현상이 생기나요...해결방법좀 알려주세요 ㅠㅠ
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);
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();
}
});
정확히 어떤 것을 원하시는지 모르겠네요..
일반적으로 특정 객체를 움직일 때는 Animation을 이용하면 편리합니다.
이동에는 TransitionAnimation 클래스를 이용하면 되겠네요.
Animation으로 원하는 것이 안될 경우에는 Canvas에 직접 그려야 되겠죠..
어렵다
2011/06/07 14:43
텍스트입력 창을 띄워서 거기에 값을 넣으면 디비에 저장하고 싶은데
텍스트 입력 창 띄우는 방법 좁 알려주세요!
간단한 입력 창은 AlertDialog에 EditText 하나 올리면 되구요.
AlertDialog.Builder alert = new AlertDialog.Builder(context);
alert.setView(editText);
AlertDialog로 검색해보세요. 많이 나옵니다.
좀 복잡하다면 그냥 Layout 구성해서 Activity 하나 만드는 게 좋겠죠..
ch
2011/07/05 23:57
시간걸리는 작업 처리하는 부분에서 오래걸리는 작업을 수행하면, 그 작업을 전부 수행할 때 까지 로딩화면을 안띄우다가, 다 끝나고 나서야 로딩화면을 띄우고, 3초 후에 메인화면을 띄우네요.... 또 화면을 돌리면 다시 로딩화면부터하구요.. 왜그런가요?
위에 설명을 수정하였습니다.
초기화 작업을 위해서는 쓰레드처리를 해야 됩니다.
처음 글 작성 시 이 부분을 언급하려다 귀찮아서 안했습니다.
화면 돌리면 다시 로딩되는 부분은 글 마지막 부분의 AndroidManifest.xml 부분을 다시 확인해보세요.
예제 프로젝트도 첨부하였습니다.
강식
2011/08/17 00:23
인트로띄우고나서 로그인띄우려고 합니다.
handleMessage부분에 fisnish()하고 startActivity(로그인)했거든요.
별 이상은 없는데, 인트로뜨고 로그인뜨기전에 바로 백버튼눌러서 종료했는데
2초후에 로그인이 뜨네요. 이러면안될것같은데요.
이처럼 액티비티들의 실행을 보통 어떻게 구현을 하나요?
Synology 파일스테이션의 UI가 국내에서 많이 사용하는 웹하드의 UI와 달라서 사용자들이 메뉴를 찾기 힘들어 하는 것 같아서 만들어 보았습니다.
사용자들이 "작업" 버튼을 표시하기 위해서 이미지를 수정해서 그 위치를 표시하는 상황을 보고, 언제 시간내서 이런 패치를 만들어야지... 하고 있었는데.. 얼마 전 하늘님께서 관련 패치를 배포했길래.. 안할려고 했었습니다. 그런데 제가 사용 중인 펌웨어 업데이트에 실패하는 209+II((DSM 2.3-1118))에는 하늘님의 패치가 적용되지 않더군요.. 최근 펌웨어와 차이가 많이 나서 그런 것 같습니다. 그래서 만들어 보았습니다.
패키지를 설치하고, 파일스테이션에 접속하면 아래 그림에서 보는 것처럼 각종 버튼이 표시됩니다.
위 이미지에서 보는 것처럼 각종 이미지 버튼은 발로 만든 거라 예쁘지가 않습니다. (프리맥스님께서 만들어주신 이미지로 변경했습니다. 2010 08-02)
설치: 위 파일을 내려받고, 압축을 해제한 후 .spk 파일을 관리자 페이지의 패키지 관리에서 설치(하늘님의 패치를 이용할 경우 하늘님의 패치를 적용한 후 이 패키지를 설치하기 바랍니다)
삭제: 설치한 패키지를 삭제하면 기본 상태로 되돌아 갑니다.
사용자 버튼의 UI 변경하기 - /var/packages/fsUserMenu/target/html 폴더에 있는 user-script.js를 수정하면 됩니다. 이미지는 images에 올리면 됩니다.
* 참고로 아래의 나스에서 테스트 하였습니다. - ds209+II 펌웨어 DSM 2.3-1118 - ds209+II 펌웨어 DSM 2.3-1139 - ds101g+ 펌웨어 DSM 2.3-1157(ds-107용 수정 펌웨어) - dsS710+ 펌웨어 DSM 2.3-1161 - ds1010+ 펌웨어 DSM 2.3-1161 - ds101g+ 펌웨어 DSM 3.0-1354(ds-107용 수정 펌웨어)
* 미니 배너 사용시 메뉴가 표시되지 않습니다. 미니 배너를 비활성화 시켜주십시오.
* 설치 후 이 메뉴가 표시되지 않는 경우는 웹브라우저의 임시(캐쉬) 파일을 삭제하면 표시됩니다.
* 이 패키지는 Synology 나스의 모든 모델에서 테스트된 것이 아니며, 테스트되지 않은 모델에서 사용할 경우 파일스테이션이 비정상적으로 동작을 할 수 있으며, 이로 인한 각종 문제 및 손실에 대하여 제작자는 보증하지 않습니다.
* 혹시 이 패키지를 사용하시는 웹디자이너 분이나 주변에 친한 웹디자이너가 있다면 버튼 이미지나 플래시 메뉴를 만들어 주시면 고맙겠습니다. 제(isul at isulnara.com)게 보내주시면 패키지에 기본 포함시키도록 하겠습니다. 플래시 메뉴에서 링크는 아래와 같은 형식이면 됩니다.