Study/Android - 해당되는 글 11건
크리에이티브 커먼즈 라이선스
Creative Commons License

안드로이드에서 SharedPreference를 이용하면 어플리케이션에 연관된 간단한 데이터(String, int, boolean, 등등)들을 쉽게 파일시스템에 저장하고 가져올 수 있습니다.

데이터는 항상 키와 값으로 저장됩니다. 키를 통해서 데이터를 저장하고 또 가져올 수 있습니다.

데이터 가져오기

SharedPreferences prefs = getSharedPreferences("PrefName", MODE_PRIVATE);
String account = prefs.getString("key_account", "");
boolean bool_data = prefs.getBoolean("key_bool", true);

Context.getSharedPreferences함수를 통해서 SharedPreferences 인스턴스를 가져옵니다. getString, getBoolean, getInt등을 통해 첫번째 인자는 키를 주고 두번재 인자는 디폴트값입니다. 만약 해당 키에 대한 데이터가 존재하지 않는 경우 디폴트값을 리턴해줍니다.

데이터 저장하기

SharedPreferences.Editor editor = prefs.edit();
edit.putBoolean("key_bool", bool_data);
edit.putString("key_string", string_data);
edit.commit();

데이터를 저장하기 위해서는 SharedPreferences.Editor인스턴스를 edit()함수를 통해 가져옵니다. 그리고 putString, putInt, putBoolean등을 통해 데이터를 저장한 후 반드시 commit()을 호출해주어야 실제로 파일에 저장이 됩니다.

SharedPreference로 저장된 xml파일은 DDMS의 File_Explorer data-data-package-shared-prefs아래에 위치합니다.

저작자 표시
신고

'Study > Android' 카테고리의 다른 글

[Android: SharedPreference]  (0) 2011.04.05
[Android: Web Parsing]  (0) 2011.04.04
[Android: CustomView]  (0) 2011.03.29
[Android: ListView]  (0) 2011.03.28
[Android: Activity만들기]  (0) 2011.03.23
[Android: Media Scanner]  (0) 2011.03.23
Trackback 0 | Comment 0
크리에이티브 커먼즈 라이선스
Creative Commons License
일반적으로 Java platform에서는 세가지 정도의 XML 파서가 유명하다고 한다. Java's Simple API for XML(SAX), Documnet Object Model(DOM), Streaming API for XML(StAX) 가 그것들이다. 하지만 안드로이드에서는 마지막 StAX는 지원하지 않으며, SAX와 DOM은 완벽하게 지원하고 있다.

SAX는 상당히 빠른 속도에 메모리 사용량도 극히 작은 API로 event-driven으로 동작한다. XML 문서에서 각각의 태그를 만날때 마다 해당하는 EventListener가 떠서 파싱이 이루어진다. 특히 기존 Java 프로그램에서 사용하는 것과 동일한 형태로도 사용할 수 있으며, 안드로이드 SDK에서 지원하는 좀더 단순한 형태로 사용할 수도 있다.

DOM 역시 안드로이드에서 완벽하게 지원된다. SAX와 마찬가지로 기존 Java 프로그램에서 사용하는 것과 동일한 형태로 어떠한 변환없이 사용할 수 있다. DOM의 경우엔 XML 문서를 한꺼번에 모두 메모리로 읽어 놓고 DOM API를 이용해서 필요한 부분 어디로든지 검색할 수 있기 때문에 XML 문서의 크기가 크다면 모바일 환경에서 사용하기엔 약간 무리가 따른다. 하지만 XML 문서가 단순하다면 아주 간단하게 XML을 파싱하는 방법을 제공한다.

다음으로 안드로이드에서는 StAX와 비슷하게 동작하는 XmlPullParser를 지원한다. 속도는 SAX보다 약간 느리며 메모리 사용량은 비슷하다고 한다. 동작 역시 SAX와 비슷하긴 하지만 사용자가 직접 항목의 값을 가져오는 pull 방식을 취한다. (반대로 SAX의 경우는 push방식으로 볼수 있다.) 특히 XML문서의 모든 내용을 파싱하지 않고 필요한 부분까지 파싱한 후에 파싱을 끝낼 수 있기 때문에 XML문서에서 일부만 가져와서 작업을 해야할 경우엔 SAX보다 더 빠르고 단순하게 처리가 가능하다.

여기까지 기본적인 내용으로 보면 일반적인 안드로이드 앱에서는 SAX를 사용하는 것이 대세라고 볼수 있겠고, 사용하는 XML 문서의 특성에 따라 DOM 혹은 XmlPullParser를 사용하는 것도 괜찮다는 결론이 나온다. 하지만 국내 커뮤니티들에서는 사용하기 편리한 XmlPullParser를 많이 쓰는 것으로 보인다. 사실 SAX와 XmlPullParser 간의 성능차이는 그리 크지 않아보이기 때문에 본인한테 편한 것을 쓰는게 좋을 것 같다.

참고로 Shane Conder에 의해 쓰여진 기사를 보면 그림과 같이 안드로이드에서 SAX, XmlPullParser, DOM의 성능을 개략적으로 볼 수 있다.



마지막으로 앱에서 XML을 만들어 서버로 전송해야 할 경우엔 XmlPullParser와 같은 패키지에 들어있는 XmlSerializer를 사용하는 것이 편하다고 한다.

XmlPullParser 사용법

1. XmlPullParser가져오기



2. XmlPullParser로 값 가져오기

 - xpp.nextTag()  //XmlPullParser.START_TAG(2), XmlPullParser.END_TAG(3)
 - xpp.getName() //Tag안의 값(String)
 - xpp.nextText() // Tag사이의 값(String)





 

 

저작자 표시
신고

'Study > Android' 카테고리의 다른 글

[Android: SharedPreference]  (0) 2011.04.05
[Android: Web Parsing]  (0) 2011.04.04
[Android: CustomView]  (0) 2011.03.29
[Android: ListView]  (0) 2011.03.28
[Android: Activity만들기]  (0) 2011.03.23
[Android: Media Scanner]  (0) 2011.03.23
Trackback 0 | Comment 0
크리에이티브 커먼즈 라이선스
Creative Commons License

안드로이드에서 기본적으로 제공해주는 ListView를 수정하여 사용자가 정의하는 CustomView를 작성해본다.


 

우선 사용자가 화면에 뿌려주고자 하는 값들을 가진 데이터(MyData)클래스를 구현 한 다음 ArrayAdapter를 상속받은 새로운 어댑터(MyAdapter) 클래스를 구현한다.

ArrayAdapter를 상속받은 리스트는 다양한 메소드가 존재하지만 그 중 화면에 어떠한 방법으로 보여줄지를 결정하는 getView()메소드가 가장 중요하다.

우선 이 메소드를 오버라이딩하여 내부를 다시 구성한다.


LayoutInflater는 xml파일을 파싱해서 실제 object를 만들어 내는 역할을 한다.

그리고 같은 정보를 다시 갱신하지 않도록 하기 위해 ViewHolder클래스를 두고 태그로 저장하고 불러오는 형태로 효율을 높인다.

최종적으로 만들어진 뷰를 리턴하여 리스트에서 하나의 아이템으로 보일 수 있도록 한다.



 

저작자 표시
신고

'Study > Android' 카테고리의 다른 글

[Android: SharedPreference]  (0) 2011.04.05
[Android: Web Parsing]  (0) 2011.04.04
[Android: CustomView]  (0) 2011.03.29
[Android: ListView]  (0) 2011.03.28
[Android: Activity만들기]  (0) 2011.03.23
[Android: Media Scanner]  (0) 2011.03.23
Trackback 0 | Comment 0
크리에이티브 커먼즈 라이선스
Creative Commons License

리스트 뷰는 복수 개의 항목을 수직으로 표시하는 위젯이다.

리스트 뷰, 그리드 뷰, 스피너, 갤러리 등이 모두 항목 집합을 표시하는데 이들을 묶어서 어댑터 뷰라고 부른다. 각 위젯은 집합을 표시한다는 면에서 기능적으로 동일하지만 항목을 표시하는 방법이 다르다. 공동 조상인 AdapterView는 ViewGroup으로부터 파생되므로 어댑터 뷰는 항목에 해당하는 여러 개의 차일드 뷰를 가질 수 있다. 뿐만 아니라 리니어, 렐러티브같이 배치만 담당하는 레이아웃과는 달리 사용자와 상호작용도 처리하므로 터치나 키패드로 항목을 선택할 수도 있다.



코드에서 문자열 배열을 직접 정의하는 것은 효율적이지 못하며 관리에도 불리하다. 고정적인 문자열이라면 컬렉션이나 배열을 쓰는 것보다 리소스에 정의해 놓고 읽어와 사용하는 것이 바람직하다. 배열도 일정의 리소스이다. 패키지 탐색기의 values 노드에 arrays.xml파일을 만들고 다음 문서를 작성한다.

 

저작자 표시
신고

'Study > Android' 카테고리의 다른 글

[Android: Web Parsing]  (0) 2011.04.04
[Android: CustomView]  (0) 2011.03.29
[Android: ListView]  (0) 2011.03.28
[Android: Activity만들기]  (0) 2011.03.23
[Android: Media Scanner]  (0) 2011.03.23
[Android: 다국어 지원]  (0) 2011.03.23
Trackback 0 | Comment 0
크리에이티브 커먼즈 라이선스
Creative Commons License
안드로이드는 4개의 컴포넌트로 구성된다. 그 중 액티비티를 만드는 방법을 보려고 한다.

다음과 같은 순서로 진행한다.
  1. Activity클래스를 상속한 클래스 생성.
  2. 레이아웃을 위한 android XML파일 생성.
  3. AndroidManifest에 Activity를 등록.

 

 


저작자 표시
신고

'Study > Android' 카테고리의 다른 글

[Android: CustomView]  (0) 2011.03.29
[Android: ListView]  (0) 2011.03.28
[Android: Activity만들기]  (0) 2011.03.23
[Android: Media Scanner]  (0) 2011.03.23
[Android: 다국어 지원]  (0) 2011.03.23
[Android: 위젯의 클릭 이벤트]  (0) 2011.03.21
Trackback 0 | Comment 0
크리에이티브 커먼즈 라이선스
Creative Commons License
에뮬레이터를 사용하여 안드로이드를 개발하게 될 경우, SD카드를 설정해주고, 그 SD카드에 이미지나 음악파일을 추가하여 사용할 경우가 있다. 

이때, 파일을 추가한 후, 추가한 정보가 바로 나타나지 않을 경우가 있는데, 이런 겨우에는 Media Scanner를 이용하여 가상 SD카드를 스캔해주어야 한다. 

아래는 Media scanner에 접근 하는 방법이다. 

 
저작자 표시
신고

'Study > Android' 카테고리의 다른 글

[Android: ListView]  (0) 2011.03.28
[Android: Activity만들기]  (0) 2011.03.23
[Android: Media Scanner]  (0) 2011.03.23
[Android: 다국어 지원]  (0) 2011.03.23
[Android: 위젯의 클릭 이벤트]  (0) 2011.03.21
[Android: 이벤트 핸들러]  (0) 2010.10.16
Trackback 0 | Comment 0
크리에이티브 커먼즈 라이선스
Creative Commons License
안드로이드는 쉽게 다국어를 지원할 수 있도록 설계되어있다.
다른 언어에 대해 일일이 체크할 필요 없이 xml파일을 수정하여 추가하는 방법을 사용하면 된다.
res폴더에 values-ko(한국어)폴더를 새로 만든다.



values폴더에 들어있는 strings.xml파일을 values-ko폴더에 복사한후 다음과 같이 수정한다.


이곳까지 진행이 되었다는 프로그램 구현시 작업은 모두 끝이 났고 이제 모바일 단말에서 설정만 수정하면 사용자에게 맞는 언어로 변환되어 나타날 것이다.

다음은 모바일 단말에서 언어를 선택하는 방법이다.


 

 

 

 

저작자 표시
신고

'Study > Android' 카테고리의 다른 글

[Android: Activity만들기]  (0) 2011.03.23
[Android: Media Scanner]  (0) 2011.03.23
[Android: 다국어 지원]  (0) 2011.03.23
[Android: 위젯의 클릭 이벤트]  (0) 2011.03.21
[Android: 이벤트 핸들러]  (0) 2010.10.16
[Android: 출력]  (0) 2010.10.15
Trackback 0 | Comment 0
크리에이티브 커먼즈 라이선스
Creative Commons License


비슷한 코드가 반복되므로 리팩토링을 한다. 안드로이드는 하나의 리스터를 여러 뷰에 대해 등록하는 것을 허용한다.



액티비티가 OnClickListener 인터페이스를 직접 구현하였으므로 이 경우 리스너는 액티비티 자신인 this이다. 한 리스너를 두 버튼의 클릭 메서드로 같이 등록했으므로 어떤 버튼을 누르나 호출되는 메서드는 동일하다. 대신 onClick 메서드는 누구를 클릭했는지 View타입의 인수 v를 전달받으며 vgetId 메서드를 호출하여 클릭된 버튼을 알아내고 각 버튼별 클릭처리를 수행한다.

 

핸들러가 하나로 통합되었다는 면에서 바람직하지만 액티비티를 리스너로 사용한다는 점은 다소 부담스럽다. 최상위의 액티비티는 그대로 두고 별도의 리스너 객체를 멤버로 선언한 후 이 멤버를 리스너로 사용하는 것이 좀 더 깔끔하다.

 


위의 코드는 위젯의 리스너를 처리하는 가장 정석적인 방법이다.

저작자 표시
신고

'Study > Android' 카테고리의 다른 글

[Android: Media Scanner]  (0) 2011.03.23
[Android: 다국어 지원]  (0) 2011.03.23
[Android: 위젯의 클릭 이벤트]  (0) 2011.03.21
[Android: 이벤트 핸들러]  (0) 2010.10.16
[Android: 출력]  (0) 2010.10.15
[Android: 레이아웃(Layout)?]  (0) 2010.10.03
Trackback 0 | Comment 0
크리에이티브 커먼즈 라이선스
Creative Commons License

이벤트 처리?

미리 정의된 절차대로 동작하는 것이 아니라 사용자의 입력이나 시스템의 상황 변화에 따라 발생하는 이벤트에 적절히 반응하도록 작성해야 한다. 이벤트를 처리에는 6가지 방법이 제공된다.

 

[이벤트1: 콜백 메서드 재정의]

이벤트를 받는 가장 쉬운 방법은 해당 클래스를 재정의해 콜백 메서드를 작성하는 것이다. 콜백은 특정 이벤트가 발생했을 때 시스템에 의해 자동으로 호출되는 메서드이며 이 메서드에 코드를 작성해 놓으면 이벤트 발생시의 동작을 정의할 수 있다. 사용자와 상호 작용하는 주체가 뷰이므로 이벤트 발생시의 동작을 정의할 수 있다.

ð  콜백은 특정이벤트 발생시 시스템에 의해 자동으로 호출되는 메서드이다.

ð  이 메서드에 코드를 작성해 놓으면 이벤트 발생시 동작을 정의할 수 있다.

 

대표적인 콜백 메서드

  boolean onTouchEvent (MotionEvent event) //사용자가 화면을 터치할 때

  boolean onKeyDown (int keyCode, KeyEvent event) //키를 누를 때

  boolean onKeyUp (int keyCode, KeyEvent event) //키를 뗄 때

  boolean onTrackballEvent (MotionEvent event) //트랙볼을 굴릴 때

 콜백 메서드를 재정의하면 특정 이벤트가 발생하는 시점을 정확하게 가로챌 수 있을 뿐 아니라, 이벤트에 대한 상세정보까지 얻을 수 있다.

특정사건에 대해 특정 메서드를 호출하기로 프레임워크와 약속되어 있으므로, 지정된 원형대로 메서드를 재정의만 하면 된다. 그러나 이 방법에는 몇 가지 단점 및 한계가 있다.

1)     메서드를 재정의 하기 위해서는 반드시 슈퍼 클래스를 상속받아야 한다.

View onTouchEvent 메서드를 수정할 수 없으므로, View객체를 상속받은 새로운 클래스를 파생시켜야만 원하는 코드를 집어 넣을 수 있다.

뷰를 재정의하는 것은 문제가 되지 않지만 Button이나 TextView같은 위젯의 경우 이벤트를 처리하기 위해 일일이 클래스를 만들어야 하는 번거로움이 있다.

2)     프레임워크는 일반적인 이벤트에 대해 콜백 메서드를 제공하지만, 모든 이벤트에 대해 콜백이 다 정의되어 있는 것은 아니다. 터치나 키 입력외에도 진동센서, 조도센서 등 별별 이벤트가 많이 있는데 이것을 일일이 지정할 수는 없기 때문이다. 또한 이벤트는 사용자가 정의할 수도 있으므로, 콜백 메서드는 이벤트를 처리하는 일반적인 방법이 될 수 없다.

 

[이벤트2:  리스너 인터페이스 구현]

 

대표적인 리스너에 선언된 메서드

  View.OnTouchListener : boolean onTouch (View v, MotionEvent event)

  View.OnKeyListener : boolean onKey (View v, int keyCode, KeyEvent event)

  View.OnClickListener : void onClick (View v)

  View.OnLongClickListener : boolean onLongClick (View v)

  View.OnFocusChangeListener : void onFocusChange (View v, boolean hasFocus)

 

  View 클래스의 내부 인터페이스로 OnTouchListener 인터페이스가 선언되있고, 이 인터페이스는 onTouch라는 추상 메서드를 포함한다이 메서드를 이벤트 핸들러라고 부른다. 다른 리스너들도 이름만 조금 다를 뿐, 거의 비슷한 구조이다그러나 인터페이스는 어디까지나 껍데기일뿐, 그 자체가 이벤트를 받을 수는 없다단순히 특정 이벤트를 처리하는 핸들러의 원형이 어떠해야 한다는 것을 강제할 뿐이다.

 

  이벤트를 처리 하는 방법은

  (1) 리스너를 구현하는 클래스를 선언하고 그 객체를 생성한다.

       클래스가 되려면 리스너의 추상 메서드인 핸들러를 구체적으로 구현해야 한다.

  (2) 이렇게 구현된 객체를 리스너 객체라고 한다.

  (3) 리스너를 구현한 다음에는 뷰에 이벤트가 발생했을 때, 핸들러가 호출되도록 연결해야 한다.

       구현만 한다고 이벤트와 리스너가 자동으로 연결되는 것은 아니므로, 어떤 리스너가 어떤

    이벤트를 처리하는지 등록해야 한다.

등록 메서드는 리스너별로 따로 준비되어 있는데, 이름이 "set+리스너"식이어서 외우기 쉽다.

 

  void setOnTouchListener (View.OnTouchListener)

  void setOnKeyListener (View.OnKeyListener)

  void setOnClickListener (View.OnClickListener)

  void setOnLongClickListener (View.OnLongClickListener)

  void setOnFocusChangeListener (View.OnFocusChangeListener)

 

리스너로 이벤트 처리하는 절차

리스너를 구현하는 클래스를 선언하고 추상 메서드를 구현한다.

리스너 touchListener를 선언 및 생성한다.

준비된 리스너 객체를 뷰의 이벤트와 연결한다.

 

콜백 메서드는 상속을 받아야만 재정의 할 수 있는데, 리스너는 인터페이스이므로 임의의 클래스가 구현할 수 있다. 그러나 인터페이스 구현을 위해 별도의 클래스를 하나 더 선언해야 한다는 번거로움이 있다.

 

[이벤트3: 액티비티가 리스너 구현]

기존의 클래스에 인터페이스를 구현하는 방법

클래스를 따로 선언하지 않고 액티비티가 인터페이스를 직접 구현하는 방식이다.

But. 액티비티랄는 큰 단위가 하위의 뷰를 위한 메서드를 제공한다는 면에서 불합리하다.

 

[이벤트4: 뷰가 리스너 구현]

액티비티가 리스너를 구현할 수 있는 것처럼 뷰도 마찬가지이다.

액티비티나 뷰, 둘다 클래스이므로 임의의 인터페이스를 구현할 수 있다.

이벤트를 처리하는 메서드를 내부에 포함한다는 면에서 구조상 깔끔하고 뷰를 재활용하기도 유리하다. But. 리스너 구현만을 위해 일부러 상속을 받는다는 것이 번거롭다.

 

[이벤트5: 익명 이너 클래스를 사용]

이벤트 처리를 위해 꼭 필요한 알맹이는 사실 핸들러 메서드뿐이다.

그런데 이 코드를 핸들러로 감싸기 위해 더 많은 코드가 필요하다.

자바는 이런 경우를 위해 익명 이너 클래스라는 문법을 제공한다.

1)     상위 클래스나 인터페이스의 메서드 하나를 재정의하기 위해 클래스를 선언하는 경우

2)     그리고 그 클래스의 객체가 단 하나만 필요한 경우

굳이 클래스를 선언할 필요 없이 상속과 재정의를 동시에 할 수 있다.

 

[이벤트6: 익명 이너 클래스의 임시 객체 사용]

가장 함축된 형태의 이벤트 처리 코드

안드로이드에서 주로 이 방법을 통해 이벤트 핸들러를 작성한다.

5번 방법은 익명의 이너 클래스를 사용함으로서 코드가 대폭 짧아졋는데 사실 이럴때는 객체의 이름조차도 줄 필요가 없으며, 임시 객체 하나를 생성하여 등록 메서드의 인수로 전달해 버리면 된다. 객체 생성문 자체를 아예 setOnTouchListener 호출문 안에 넣어 버리는 것이다.

 

[정리]

이벤트를 처리하는 방법은

크게 상속받은 후 콜백 메서드를 재정의하는 방법과 리스너를 등록하는 방법 두 가지로 분류할 수 있고 리스너를 액티비티에 구현하느냐, 뷰에 구현하느냐, 주체에 따라 몇가지 형태로 나누어 지고 코드를 압축하는 방법이 달라진다.

 

[이벤트5를 사용한 코드]

public class HandleEvent extends Activity {
    public void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      View vw = new View(this);
      vw.setOnTouchListener(TouchListener);
      setContentView(vw);
    }

    private View.OnTouchListener TouchListener = new View.OnTouchListener() { // 상속과 재정의를 동시에
      public boolean onTouch(View v, MotionEvent event) {
        if (event.getAction() == MotionEvent.ACTION_DOWN) {
          Toast.makeText(HandleEvent.this,"Touch Event Received",
          Toast.LENGTH_SHORT).show();
          return true;
        }
        return false;
      }
    };
  }

 

[이벤트6을 사용한 코드]

public class HandleEvent extends Activity {
    public void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      View vw = new View(this);
      vw.setOnTouchListener(new View.OnTouchListener() {
        public boolean onTouch(View v, MotionEvent event) {
          if (event.getAction() == MotionEvent.ACTION_DOWN) {
            Toast.makeText(HandleEvent.this,"Touch Event Received",
            Toast.LENGTH_SHORT).show();
            return true;
          }
          return false;
        }
      });
      setContentView(vw);
    }
  }

저작자 표시
신고

'Study > Android' 카테고리의 다른 글

[Android: Media Scanner]  (0) 2011.03.23
[Android: 다국어 지원]  (0) 2011.03.23
[Android: 위젯의 클릭 이벤트]  (0) 2011.03.21
[Android: 이벤트 핸들러]  (0) 2010.10.16
[Android: 출력]  (0) 2010.10.15
[Android: 레이아웃(Layout)?]  (0) 2010.10.03
Trackback 0 | Comment 0
크리에이티브 커먼즈 라이선스
Creative Commons License

커스텀 뷰?
커스텀이란 입맛대로 만든다는 뜻이며 모양과 기능을 마음대로 디자인할 수 있어 상상하는 모든 것을 다 만들 수 있다.
임의의 위치에 원하는 그림을 그려 넣고 기능도 완전히 다시 정의하는방식이다.

Canvas?
캔버스는 뷰의 그리기 표면이며 이 위에 그림을 그린다. 시스템이 초기화되어 뷰의 onDraw인스로 전달하므로 따로 생설할 필요 없이 전달 받은 인수를 사용하기만 하면된다.

void drawPoint(float x, float y, Paint paint)
// (x,y)지점에 paint로 점을 찍는다.
void drawLine(float startX, float StartY, float stopX, float stopY, Paint paint)
// (startX, startY)에서 (stopX, stopY)로 paint로 선을 그린다.
void drawCircle(float cx, float cy, float radius, Paint paint)
//중심점(cx,cy)로 반지름 radius인 원을 paint로 그린다.
void drawRect(float left, float top, float right, float bottom, Paint paint)
//left, top, right, bottom지점에 paint로 그린다.
void drawText(String text, float x, float y, Paint paint)
//가로 x , 세로 y로 문자열 text를 paint로 그린다.

Paint?
Paint객체는 그리기에 대한 속성 정보를 가지는 객체이며 모든 그리기 함수에게 인수로 전달된다.
void setARGB(int a, int r, int g, int b) //ARGB값으로 색상값 지정
void setColor(int color) //색상값으로 페인트 색상 지정

안티알리아싱(AntiAlias)?
void setAntiAlias(boolean a)
안티 알리아싱은 색상차가 뚜렷한 경계 부근에 중간색을 삽입하여 도형이나 글꼴이 주변 배경과 부드럽게 잘 어울리도록 하는 기법이다. 안티 알리아싱을 사용하면 출력 품질은 좋아지지만 중간색상을 삽입하기 위한 연산을 해야 하므로 속도는 떨어진다. Default는 false이다.

비트맵(Bitmap)?
작도 함수로 비록 섬세한 그리기가 가능하기는 하지만 사진 같은 복잡한 모양을 그리기는 역부족이다. 비트맵을 사용하려면 먼저 리소스 폴더에 준비한 비트맵을 복사해 넣어야 한다. 해상도별로 hdpi, ldpi, mdpi 세가지가 존재한다. 가급적이면 PNG포맷을 사용하는 것이 좋고 JPG도 무난하다.

Resource?
응용프로그램의 리소스는 resources객체가 관리하는데 이 객체는 고수준의 리소스 액세스 API를 제공한다. 비트맵이나 문자열 XML문서 등, 리소스에 정의된 모든것들을 읽을 수 있다.
Resource View.getResources() //Resource 객체를 얻을 때는 뷰의 다음 메서드를 호출한다.
Drawable Resources.getDrawable(int id) //이미지뿐만 아니라 색상, 도형, 등 여러가지 형태의 리소스가 같이 들어 있으므로 Drawable 상위 클래스 타입을 리턴한다.

더블 버블링?
모바일 장치는 반투명 처리를 많이 하며 이를 위해 배경을 먼저 출력한 후 그리는데 바로 출력하면 깜박임을 발생하여 품질이 떨어진다. 이를 방지하기 위해 메모리에서 다 그린후 완성된 그림을 화면으로 보낸다. 이 기법을 더블 버블링이라고 하는데 프레임워크가 대신 해주기 때문에 우리는 인수로 전달된 캔버스에 그리기만 하면된다.

path?
패스(Path)는 직선, 곡선, 다각형 등의 도형 궤적 정보를 가지는 그래픽 객체이다. 도형의 좌표정보만을 가지므로 그 자체는 화면에 직접적으로 보이지 않으며 캔버스의 drawPath메서드를 호출해야 화면에 그려진다.
drawTextOnPath() //곡선 위에 텍스트 출력

토스트?
화면에 무엇인가를 그리는 것만이 출력의 다가 아니다. 사용자에게 어떤 식으로든 신호를 보낼 수만 있다면 모두 출력에 해당된다. 알림 사항을 전달하기만 할 뿐 포커스를 받을 수 없기 때문에 사용자의 작업을 방해하지 않는다는 것이 특징이다.
//생성 메서드
static Toast makeText(Context context, int resId, int duration);
static Toast makeText(Context context, CharSequence text, int duration)
//동작이나 배치 옵션 메서드
void setGravity(int gravity, int xOffset, int yOffset)
void setMargin(float horizontalMargin, float verticalMargin)
void setText(CharSequence s)
void setDuration(int duration)
void setView(View view)

비프음?
사용자에게 소리를 전달하는 아주 효율적인 방법이다.
MediaPlayer를 사용하여 사운드와 동영상 재생 기능을 제공하는 굉장히 복잡한 객체이며 간단한 비프음 출력도 가능하다.
여러가지 포맷이 존재하지만 wav, mp3, ogg가 무난하다.
static MediaPlayer create(Context context, int resid) //사운드 파일을 열때 사용하는 메소드 
//제어 컨트롤
public void start();
public void stop();
public void seekTo (int msec);
publci void pause();
저작자 표시
신고

'Study > Android' 카테고리의 다른 글

[Android: Media Scanner]  (0) 2011.03.23
[Android: 다국어 지원]  (0) 2011.03.23
[Android: 위젯의 클릭 이벤트]  (0) 2011.03.21
[Android: 이벤트 핸들러]  (0) 2010.10.16
[Android: 출력]  (0) 2010.10.15
[Android: 레이아웃(Layout)?]  (0) 2010.10.03
Trackback 0 | Comment 0

강군v's Blog is powered by Daum & tistory

 

티스토리 툴바