버튼의 배경 속성
background 이용
void setBackgroundColor (int color)
void setBackgroundDrawable(Drawable d)
void setBackgroundResource (int resid)

nine patch
확장할 부분과 그대로 출력할 부분을 조각으로 나누어 지정
포멧 : PNG
확장자 : .9.png


이미지 원래 모양 외에 바깥쪽에 1픽셀 너비의 투명한 영역이 추가로 존재
이 영역에 검은색 점을찍어 확장 및 테스트배치 영역에 대한 정보를 기록
위쪽, 왼쪽에는 이미지가 확장될 때 반복될 부분을 지정
아래쪽 오른쪽에는 내용물이 배치될 영역을 지정

android- sdk / tools / draw9patch.bat파일


참고할만한 블로그
http://sje0114121.blog.me/150106034371

'안드로이드' 카테고리의 다른 글

AppWidget  (0) 2011.07.28
Broadcast Receiver  (0) 2011.07.26
Data Base  (0) 2011.07.25
broadcast receiver java code로 등록  (0) 2011.07.25
MediaPlayer  (0) 2011.07.19

  • Cursor android.database.sqlite.SQLiteDatabase.query(boolean distinct, String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy, String limit)

    • boolean distinct : 결과 값에 대한 유일한 값만 가져올지에 대한 여부
    • String table : 쿼리할 테이블 명
    • String[] columns : 쿼리대상 열명
    • String selection : 쿼리의 조건절을 구성
    • String[] selectionArgs : selection에 들어간 ? 와일드문자를 대체할 문자열
    • String groupBy  : 데이터를 묶을 그룹 조건 정의
    • String having : groupBy 지정된 경우 그룹 조건 정의
    • String orderBy : 결과의 정렬 조건
    • String limit : 결과 값의 행 개수를 제한을 정의


  •  

    '안드로이드' 카테고리의 다른 글

    Broadcast Receiver  (0) 2011.07.26
    나인패치  (0) 2011.07.26
    broadcast receiver java code로 등록  (0) 2011.07.25
    MediaPlayer  (0) 2011.07.19
    Activity Cycle  (0) 2011.07.12

    등록
    public void on Resume(){
    super.onResume();
    restterReceiver(br,filter)'
    }

    해제
    public void onPause(){
    super.onPause();
    unregisterReceiver(br);
    }

    => Receiver  Activity 등록하면 Activity 활성화 상태에서만 cast 반응

    => BroadcastReceiver class 상속하여 onReceiver method 오버라이딩 하고 manifest 추가하면 Activity상태와 무관하게 cast요청을 감지.

    '안드로이드' 카테고리의 다른 글

    나인패치  (0) 2011.07.26
    Data Base  (0) 2011.07.25
    MediaPlayer  (0) 2011.07.19
    Activity Cycle  (0) 2011.07.12
    startActivityForResult()  (0) 2011.07.12

    Audio 포맷
    - WAV, MP3(8~320Kbps), MIDI, OGG, 3GP
    Video 포맷
    - H263, H264, Mpeg4


    생성자
    public MediaPlayer()

    재생할 미디어 전달
    void setDataSource(String path)
    void setDataSource(Context context, Uri uri)
    void setDataSource(FileDescriptor fd, [long offest, long length])

    method호출
    void prepare()                      - 동기적으로 준비하여 준비 끝나면 return
    void prepareAsync()             - 시간이 오래 걸릴 때 사용. 비동기적 동작. 콜백을 통해 준비 완료를 통보받아야 함.
    - 준비상태가 되면 이후 바로 재생 가능. 
    - 로컬 파일이나 Uri객체로부터 미디어 오픈
    - return값은 없으며, 에러 발생시 예외가 return->반드시 처리
    - ex)동영상의 경우 필요한 코덱을 찾는 등 원활한 재생을 위해 얼마간의 버퍼할당 필요 때문에 오픈 직후 자동으로 준비상태를 만들기 위해 호출

    create method
    static MediaPlayer create(Context context, int resid)
    static Mediaplayer create(Context context, uri uri.[SurfaceHolder holder])
    - 스트림은 열 수 있으나 파일을 직접 열수는 없음.
    - 리소스의 미디어는 보통 작은 크기이므로 오픈 직후 자동으로 준비상태가 돼 바로 재생 가능.
    - 에러 발생시 예외를 return하는 대신 null이 return
    - 간단한 효과음을 재생할 때는 이 method를 호출하는 것이 간편,

    재생관련 method
    void start()                        - 재생을 시작한 후 즉시 return->사운드 재생 중에도 다른 작업 가능. 재생시작후 스트림의 끝까지 재생한 후 자동으로 멈춤.
    void stop()
    void pause()

    반복적 재생을 위한 method
    void setLooping (boolean looping)
    boolean isLooping()
    - setLooping(true)를 호출해 두면 한 스트림을 계속 반복 -> 게임 배경음악 재생용으로 적합.


    void release()     : 객체를 완전히 파괴하여 더이상 사용할 수 없는 상태로 해제, 재생 중에도 호출 가능
    void reset()        : 초기화되지 않은 처음 상태로 객체를 되돌리며 이후 재초기화 해 사용할 수 있음.


    create 정적 메소드 - 대용량 미디어에는 효율이 좋지 않기 때문에 짧은 미디어에만 사용.

    raw폴더에 있는 파일 재생. 리소스재생,
    Button play=(Button)findViewById(R.id.play);
    play.setOnClickListener(new Button.OnClickListener() {
       public void onClick(View view){
             MediaPlayer player = MediaPlayer.create(MyPlayer.this, R.raw.pinocchio);
             player.start();
        }
    });

    상태변화도



    - 객체를 처음 생성하거나 reset하면 Idle상태로 시작.= 재생 할 수 없는 상태
    - 똑같은 Idle 상태라도 새로 생성된 객체과 reset된 객체의 동작은 조금 다름. (상태에 맞지 않는 메소드 호출시 에러처리가 다름) = 생성 직후엔 단순히 에러를 무시/ reset된 객체  Error상태로 전환 onError콜백 호출.
    - Idle상태에서 초기화 하려면 setDataSource메서드를 호출하여 미디어 오픈
       = 이 메서드는 Idle일 때만 호출 가능.
       = 재생 중이거나 일시 정지된 상태에서 미디어를 교체하진 못함.
       = 미디어를 연 후 prepare 메서드 호출하여 준비상태로 전환, 재생 전엔 반드시 준비 상태
       = create 정적 메서드로 객체를 생성하면 생성과 동시에 미디어를 열고 준비상태로 시작. 준비상태일때 볼륨 조절, 반복여부등을 조절 가능
       = start메서드 호출하면 재생중 상태가 되며, 이 상태에서 언제든지 정지, 일시정지 가능. 
       = 일시정지는 pause/start메서드로 언제든지 토글 가능.
       = 그러나 stop상태에선 바로 재생 상태로 복귀할 수 없으며 다시 준비 과정을 거친다.
       = isPlaying 메서드는 현재 재생중인지를 조사하는데, 일시정지, 상태일때는 false이며 재생중에는 true가 리턴.

    재생 길이나 위치 조사 및 변경하는 메소드
    - ingetDuration() : 총 재생 길이
    - ingetCurrentposition() : 현재 재생 위치
    주로 프로그레스바 갱신에 사용.
    둘다 준비 상태 이후에는 언제든지 호출 가능.
    seekTo는 재생 위치를 임의로 변경 - Prepared, Started, Paused, PlaybackCompleted상태에서 호출 가능.
    재생 중에도 즉시 다른 위치로 이동 가능하며 준비나 일시정지된 상태에서도 시작 위치를 마음대로 바꿀 수 있지만 정지된 상태에서는 위치를 바꿀 수 없다.

    mediaplayer는 상태가 변경되거나 에러가 발생할 때 미리 등록된 콜백 메서드 호출
    에러콜백은 등록하는 것이 좋음.

    void setOnErrorListener (MediaPlayer.OnErrorListener listener)

    void setOnPreparedListener (MediaPlayer.OnPreparedListener listener)

    void setOnCompletionListener (MediaPlayer.OnCompletionListener listener)
    - 스트림을끝까지 재생했을 때 호출. 이때 객체는 재생 완료 상태.
    - 이 콜백을 받았을 때 start메서드를 호출하면 같은 미디어 처음부터 다시 재생.
    - 다음 미디어 재생 위해선 reset하여 Idle상태로 돌아간 후 처음부터 다시 시작.
    - setDataSource 메서드는 Idle상태에서만 호출 가능하므로 reset해야만 미디어 교체 가능.

    void setOnBufferingUpdateListener (MediaPlayer.OnBufferingUpdateListener listener)
    -스트리밍 시에 버퍼에 새로운 데이터가 들어왔을 때 호출.
    - 로컬 리소스나 파일을 읽을 때는 버퍼링을 하지 않으므로 이 콜백을 프로그래밍 할 필요는 없음.

    void setOnSeekCompleteListener (MediaPlayer.OnSeekCompleteListener listener)
    - 재생 위치 변경이 완료될때 호출.
    - seekTo 메서드가 동기적으로 동작하지 않으므로 변경 시점을 알아내려면 필요.


    '안드로이드' 카테고리의 다른 글

    Data Base  (0) 2011.07.25
    broadcast receiver java code로 등록  (0) 2011.07.25
    Activity Cycle  (0) 2011.07.12
    startActivityForResult()  (0) 2011.07.12
    Intents and IntentsFilters  (0) 2011.07.12

    onCreate
    • 호출 시점 : 앱이 새로 실행되거나, 앱을 종료하지 않은 상태에서 다른 앱이 실행되면서 안드로이드가 메모리 확보를 위해 강제로 프로세스를 죽였다가 back 버튼으로 해당 앱으로 돌아오려 할 경우. 즉, Activity가 메모리에 완전히 다시 올라갈 경우
    • 실행할 사항 : 모든 Activity에서 초기화 상황을 확인하고 설정을 읽고 적용하는 등의 기본적인 초기화 상황을 수행해야 한다. 앱이 메모리에서 내려간 경우, 설정 사항도 모두 없어지기 때문에 모든 Activity에서 초기화를 할 수 있어야 한다. 다음으로 각종 Activity view 객체와 이벤트 핸들러를 초기화한다. 세번째로 Intent를 확인하고 각종 모델과 데이터 객체를 초기화한다. 마지막으로 이전에 종료된 상태를 복구하기 위해 Bundle을 이용해 필요한 데이터나 객체를 복구한다
    onStart
    • 호출 시점 : onCreate 실행 후, 또는 onRestart 실행 후 호출된다.
    • 실행할 사항 : 연산이 필요할 경우 연산을 수행한다.
    onResume
    • 호출 시점 : onStart 다음, 또는 다른 Activity 실행을 위해 onPause가 실행된 다음 호출. onResume 이후에 Activity가 실제로 동작함
    • 실행할 사항 : 화면에 내용을 출력한다. 각종 View 객체에 출력할 값을 세팅한다.
    onPause
    • 호출 시점 : 다른 Activity가 실행되면 현재의 Activity를 임시중단시킨다. 화면에 여전히 보여지는 상태(예를 들어 다이얼로그 팝업이 뜨는 경우)에는 onPause까지 실행된다.
    • 실행할 사항 : 별다른 사항이 없다. 현재 상태 저장을 위한 기능은 안드로이드가 알아서 한다. 추가로 저장이 필요한 사항은 onSaveInstanceState 메소드에서 구현한다. 필요할 경우 구현한다.
    onStop
    • 호출 시점 : 화면에 더 이상 보여지지 않을 경우 호출된다.
    • 실행할 사항 : 별다른 사항이 없다. 필요할 경우 구현한다.
    onDestroy
    • 호출 시점 : Activity가 완전히 종료될 때 호출된다.
    • 실행할 사항 : 별다른 사항이 없다. 필요할 경우 구현한다.
    onRestart
    • 호출 시점 : onStop으로 Activity가 화면이 완전히 가려졌다가 다시 보여질 때 호출된다.
    • 실행할 사항 : 별다른 사항이 없다. 필요할 경우 구현한다.



    ※ A Activity 실행 중 다른 신호가 들어왔을 때의 반응 ( Log cat을 통해 확인 )
    onCreat  A - onResum A - Intent - onPause A - onCreat B - onStop A

    public class TextTestActivity extends Activity {
     static final String TAG = "ActParent";
        /** Called when the activity is first created. */
        @Override
        public void onCreate(Bundle savedInstanceState) {
            Log.i(TAG,"onCreate");
         super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
        }
       
    //    Button btn = (Button)findViewById(R.id.bt);
        public void OnClick(View v){
         Log.i(TAG, "startActivity");
         Intent intent = new Intent(this, TextTestchild.class);
         startActivity(intent);
        }
        public void onResume(){
         super.onResume();
         Log.i(TAG,"onResum");
        }
        public void onPause(){
         super.onPause();
         Log.i(TAG,"onPause");
        }
        public void onRestart(){
         super.onRestart();
         Log.i(TAG,"onRestart");
        }
        public void onStop(){
         super.onStop();
         Log.i(TAG,"onStop");
        }
        public void onDestroy(){
         super.onDestroy();
         Log.i(TAG,"onDestroy");
        }
    }

    '안드로이드' 카테고리의 다른 글

    broadcast receiver java code로 등록  (0) 2011.07.25
    MediaPlayer  (0) 2011.07.19
    startActivityForResult()  (0) 2011.07.12
    Intents and IntentsFilters  (0) 2011.07.12
    9.png  (0) 2011.07.12

    - Android의 Activity들은 startActivityForResult() method 통해 sub activity를 만들고 Activity끼리 서로 데이터를 교환 가능하며 그 사이에는 'Extra'라고 하는 통로가 존재.

    -

    Activity A가 startActivityForResult를 통해 Activity B를 호출
    B는 종료되면서 Result값을 통해 Extra 꾸러미를 넘김.
    Activity는 Extra 꾸러미 안에 있는 데이터들을 꺼내서 사용할 수 있음.

    [Activity A 사이드]
    Activity A에서 구현되어야 할 부분
    1. int 값의 requestCode 값 설정
    2. Intent를 만들어 Activity B를 실행
    3. onActivityResult()통해 requestCode 값에 해당하는 결과값을 받아옴.

    [Activity B 사이드]
    Activity B에서 구현되어야 할 부분
    1. Intent를 만들어 데이터 꾸러미를 Intent에 추가시킴
    2. 결과값을 보내면서 Extra 꾸러미를 가지고 있는 intent를 함께 넘겨줌.

    참고 : http://blog.naver.com/hisukdory?Redirect=Log&logNo=50088038280




    public void startActivityForResult(Intent intent, int requestCode)
    - 인수가 추가됨, (int requestCode)
    - 호출한 대상을 나타내는 식별자이며, 리턴시에 누구에 대한 리턴인가를 구분할 때 사용.
    - 여러 Activity를 호출할 경우 리턴받는 method에서 어떤 Activity에 대한 리턴인지를 구분할 수 있어야 하므로 호출되는  Activity별로 고유 번호를 붙인다.
    - 0이상의 중복되지 않는 정수를 넘기되 음수를 넘길 경우 리턴을 받지 않겠다는 뜻이다.
    - 호출된 Activity가 종료되면 다음 method가 호출되므로 리턴값을 받으려면 method 재정의
    protected void onActivityResult(int requstCode, int resultCode, Intent data)
    requestCode : Activity 호출 시 전달한 요청코드
    resultCode : Activity 실행결과
    data intent : 리턴 값 들어 있으므로 data 안의 Extras를 읽음.

    '안드로이드' 카테고리의 다른 글

    MediaPlayer  (0) 2011.07.19
    Activity Cycle  (0) 2011.07.12
    Intents and IntentsFilters  (0) 2011.07.12
    9.png  (0) 2011.07.12
    android의 gravity와 layout_gravity  (0) 2011.07.12

    Intent
    - 서로 다른 Activity끼리 호출하기 위한 통신장치. 
    - Activity 뿐만 아니라 Service, Broadcast Receiver, Content Provider 등의 컴포넌트가 수행해야 할 작업에 대한 정보를 가지며 작업 결과를 돌려주기 위해서 사용.

        명시적 Intent
           - 호출할 Activity의 정보를 가지고 있는 Intent
        암시적 Intent
           - 호출할 Activity의 정보는 가지고 있지 않으며, 의도만으로 Activity 실행.(전화걸고싶다.)
           - 어떤 Activity가 실행될지 미리 알 수 없다.
           - 주로 다른 응용 프로그램의 컴포넌트를 호출할 때 사용.
           - 운영체제에 Intent의 정보를 참조해 호출할 컴포넌트를 검색하는 알고리즘이 작성 돼 있으며, 시스템은 적절한 컴포넌트를 찾기 위해 설치된 모든 응용 프로그램의 컴포넌트를 조사.
             -> 때문에 manifest에 activity, service 등의 컴포넌트 정보를 가급적 상세하게 밝혀놓아야 함.
           - 암시적 Intent 처리
             1. Intent의 해당 action처리 가능해야 한다.
             2. activity에서 지정된 MIME 타입이 처리 가능해야 한다.
             3. activity에서 Intent에 지정된 모든 분류를 처리 가능해야 한다.
             = 컴포넌트가 자신이 처리 가능한 인텐트의 종류를 시스템에서 알수 있도록!

    Activity를 호출하는 method
    void startActivity (Intent intent)

    Intent 생성자
    Intent()
    Intent(Intent o)
    Intent(String action[, Uri uri])
    Intent(Context packageContext, Class<?> cls)
    Intent(String action, Uri uri, Context packageContext, Class<?> cls)

    ex ) Intent intent = new Intent(this, play.class);
          startActivity(intent);



    IntentsFilters
    - 컴포넌트가 자신이 처리 가능한 Intent를 안드로이드 시스템에 알리는 것.
    - AndroidManifest.xml에 입력.


    intent를 구성하는 항목, 정보.
    ACTION
    - 데이터 항목을 어떻게 처리할지에 관한 내용
    - 작업이라고 볼 수 있음.
    - action을 조사하거나 변경 : getAction, setAction method사용.
    시스템이 제공하는 표준 동작
    ACTION_CALL                           : ACTIVITY - 통화시작.
    ACTION_EDIT                            : ACTIVITY - 데이터 표시, 편집
    ACTION_MAIN                           : ACTIVITY - 메인 액티비티 실행. 입출력 데이터 없음
    ACTION_VIEW                           : ACTIVITY - 뭔가를 보여줌
    ACTION_DIAL                            : ACTIVITY - 전화를 건다.
    ACTION_BATTERY_LOW             : BR - 배터리 부족
    ACTION_HEADSET_PLUG           : BR - 헤드셋 장비에 접속하거나 분리됨
    ACTION_SCREEN_ON                 : BR - 화면이 켜짐
    ACTION_TIMZONE_CHANGED     : BR - 타임존이 변경됨.

    Data
    - 동작에 필요한 상세 데이터 제공.
    - 작업거리라고 볼 수 있음.
    - action의 목적 (예 : ACTION_CALL - 누구에게 전화를 걸 것인가.)
    - 목적이 되는 대상이 광범위 하기 때문에 임의의 대상을 유일하게 가르킬 수 있는 URI타
    입 (URI : URL과 로컬 저장 장치의 파일 경로, 주소록의 레코드 하나까지도 유일하게 저장할 수 있는 범용적인 포맷)
    - 데이터를 액세스 할 때 : getData, setData method이용
    (action과 data를 이용한 정보 : ~에 대해 ~동작)

    Type
    - 대게 자동으로 판별 가능.
    - http:// ~ 웹페이지. tel:~ 전화번호
    - 타입이 애매하거나 자동 판별을 신뢰할 수 없는 경우라면 getType, setType method로 데이터의 MIME타입을 직접 지정.
    - 호출자가 타입을 직접 지정하면 운영체제는 더 이상 자동 판별을 시도하지 않고 지정된 타입을 따름.

    Category
    - addCategory method : 카테고리 추가.
    - removeCategory method : 카테고리 삭제
    - LUNCHER로 입력 : 안드로이드 메인 배경화면에 표시.
    - DEFAULT나 ALTERNATIVE로 입력 : 런쳐로 표시되지 않는 activity

    component
    - Intent를 처리할 컴포넌트를 명시적으로 지정.

    Extras
    - 키와 값의 쌍으로 저장돼 컴포넌트에게 전달되며 리턴 용도로도 사용.
    - 저장되는 정보 타입에 따라 putExtra method가 여러 벌 오버로딩 돼 있으며 읽기 메서드는 읽는 타입에 따라 getIntExtra, getStringExtra

    Flags
    - Activity를 띄울 방법이나 Activity를 관리하는 방법 등에 대한 옵션 정보 저장.
    - setFlag method : 플래그 전체를 대입
    - addFlags method : 특정 플래그 추가

    '안드로이드' 카테고리의 다른 글

    MediaPlayer  (0) 2011.07.19
    Activity Cycle  (0) 2011.07.12
    startActivityForResult()  (0) 2011.07.12
    9.png  (0) 2011.07.12
    android의 gravity와 layout_gravity  (0) 2011.07.12
    일반 png파일
    - 안드로이드에서 원래 크기대로 보여주거나 혹은 강제로 크기 조절하여 표현. (예 : icon)

    9.png 파일
    - 원래 크기가 아닌 정해놓은 규격에 맞춰서 비율을 변형시켜서 표현 가능
    - 부분변형.
    - 이미지의 크기 변형 가능, 해당 이미지에 들어가는 컨텐츠의 크기 표현 가능
    - 이미지 변경 후 저장 -> 9.png지만 일반 png파일로 인식.

    '안드로이드' 카테고리의 다른 글

    MediaPlayer  (0) 2011.07.19
    Activity Cycle  (0) 2011.07.12
    startActivityForResult()  (0) 2011.07.12
    Intents and IntentsFilters  (0) 2011.07.12
    android의 gravity와 layout_gravity  (0) 2011.07.12

    동일한 효과를 내는 경우도 있지만, 적용되는 곳이 확실히 다름.

    android:gravity 속성
    - View 안의 내용물의 정렬 지정

    android:layout_gravity 속성
    - View 자체의 정렬 상태 지정
    - View와 레이아웃 사이에 남는 여백이 조금이라도 있어야 확인 가능.


    center_horizontal : 수평 중앙
    left                     : 컨테이너 왼쪽 배치
    right                   : 컨테이너 오른쪽 배치
    fill_horizontal       : 수평방향으로 가득 채움
    center_vertical     : 수직으로 중앙 배치
    top                     : 컨테이너 상단 배치
    bottom                : 컨테이너 하단 배치
    fill_vertical          : 수직방향으로 가득 채움
    center                : 수평으로나 수직으로 중앙에 배치
    fill                      : 컨테이너를 가득 채우도록 수직, 수평 크기를 확장



    '안드로이드' 카테고리의 다른 글

    MediaPlayer  (0) 2011.07.19
    Activity Cycle  (0) 2011.07.12
    startActivityForResult()  (0) 2011.07.12
    Intents and IntentsFilters  (0) 2011.07.12
    9.png  (0) 2011.07.12

    + Recent posts