2016년 5월 23일 월요일

Android Studio : 9 patch 를 이용한 인트로 화면 만들기.

인트로 화면을 만들어 보자.


일단 인트로 화면에 사용할 이미지를 "drawable" 폴더에 넣고.


그 이미지를 이용해 인트로 화면 액티비티를 만든다.
고정된 위치에 이미지를 위치하는 방식으로 만들면 상관없겠지만, 액티비티 전체를 하나의 이미지로 채우는 방식으로 만들경우 화면 크기에 따라 이미지가 변경되므로 저렇게 이미지가 일그러진다.

요걸 손쉽게 해결할려면 "9 patch" 를 활용하면 된다.
그냥 포토샵에서 만들어도 되지만, 기본적으로 안드로이드 SDK 에 작업 툴이 포함되어 있으므로 그걸 사용해 보자.


SDK 경로를 확인하고 그곳에 가보면...


"draw9patch.bat" 라는 파일이 있는데 이걸 실행 시켜 본다.


그럼 요런 프로그램이 뜨는데, 여기서 편집할 이미지를 불러와 작업하면 된다.


불러온 이미지의 왼쪽 화면의 가장자리 1px 영역에 마우스를 그림그리듯 드래그 하면 영역을 지정할 수 있고, 크기도 조절 가능하다.
오른쪽 영역은 적용한 결과 이미지를 보여 준다.


흔히 적용되는 형태는 이렇게 가운데를 공통영역으로 지정하지만, 이럴 경우는 가운데가 변경 영역이 되어 이미지가 일그러 진다. 인트로 영역으로 사용하려면 가운데 이미지가 변경이 되면 안되므로...


이렇게 각 모서리가 변경 영역이 되도록 지정해 준다.

-------------- 20170309 변경:
예전엔 됐는데 요즘엔 저렇게 하니 "malformed" 에러가 난다.
이경우엔 하단에는 표시하지 말고, 상단와 좌측에만 표기를 하면 "malformed" 에러가 나지 않는다.


-------------- 20170309 변경:





저장을 하면 "기존파일명.9.png" 이렇게 "9" 가 붙은 이미지가 생성된다.
그리고 기존 이미지는 지워 주면...


이렇게 이미지 크기와 맞지 않는 화면에 사용해도 중앙 이미지의 왜곡이 일어나지 않는다.

이제 시작액티비티를 새로만든 인트로 액티비티로 지정하고...


시작 액티비티에 계속 인트로만 띄울수 없으니, 일정 시간이 지나면 다른 액티비티로 이동하게 지정한다.



package kr.son10001.bcn.myson10001;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.Window;

import java.util.Timer;
import java.util.TimerTask;

public class ActivityLogo extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE); //인트로화면이므로 타이틀바를 없앤다

        setContentView(R.layout.activity_logo);

        TimerTask myTask = new TimerTask() {
            public void run()
            {
                Intent mainIntent = new Intent(ActivityLogo.this, MainActivity.class);

                startActivity(mainIntent);
                finish();  // 현재 액티비티는 종료
            }
        };

        // 타이머 설정
        Timer timer = new Timer();
        timer.schedule(myTask, 500);  // 0.5초후 실행
    }
}





요렇게 하면 0.5초 동안 인트로 화면이 나오다, 지정된 시작화면으로 자동으로 넘어 가게 된다.