http://stackoverflow.com/questions/3535074/getview-vs-bindview-in-a-custom-cursoradapter

적혀있는 말은 간단히 말해
cursoradaptor를 custom으로 사용하면 getview에 해당하는 것이
newView와 bindView로 구현되므로 getView를 통해 구현할 필요 없다는 내용입니다.

'<안드로이드>개발 > 안드로이드/App' 카테고리의 다른 글

안드로이드의 Lock  (0) 2010.09.10
[Widget] List View  (0) 2010.08.28
CursorAdaptor에서 getView?  (0) 2010.08.28
TextSwitcher 기본  (0) 2010.07.19
안드로이드 마켓에 개발자 등록  (0) 2010.07.16
[팁] 안드로이드 SDK로 DB 내용 확인하기  (0) 2010.07.08
TextSwitcher 는 Text를 변경하는데 사용하는 View입니다.
Text를 변경할 때 효과를 줄 수 있다는 장점이 있습니다.

다음 예제는 Apidemos에 나온 것과 동일한 내용을 다룹니다.
다른 점은 ApiDemos는 버튼에 반응하지만, 이 예제는 TextSwitcher를 한번 클릭할 때 반응합니다.

1. 기본 프로젝트를 생성합니다.
2. main.xml의 내용을 아래와 같이 수정합니다.

3. 소스 파일을 열고 아래와 같이 코딩합니다.

timeSwitcher.setFactory(this); 라는 문장은 매우 중요합니다.
이게 없으면  java.lang.NullPointerException 가 발생합니다.
setFactory를 추가하면 ViewFactory를 구현할 것을 요구합니다.

여기에 추가하는 View를 이용해 TextView를 생성하는 것 같습니다.

ps> 이런게 있는 줄 알았다면 좀 더 쉽게 만들었을 것을 이라고 뒤늦게 후회해보고 있습니다.
이클립스에서 빌드 중간에 취소를 하거나 리소스 에러가 생겨 취소되었을 때 발생할 수 있다.

이런 경우, 이클립스의 메뉴 중프로젝트> Clean을 선택하여 CLEAN해주면 된다.

전체 프로젝트를 클린하면 시간이 오래걸릴 수 있다. 이런 경우 에러가 난 프로젝트만 선택한다.



허접한 글이지만, 도움이 되신다면 아래 손가락 꾹 눌러주세요.
  1. 온치 2010.12.03 05:26 신고

    열심히 헛발질 했었는데 뭔가 아무것도 아닌 에러였네요ㅠㅠ 감사합니다!

  2. 이원형 2012.09.28 16:21 신고

    감사합니다.

LogCat에서 로그가 종종 안보일 때가 있다.

이런 경우 두가지 가능성이 있는 것 같다.

1. target이 선택되어 있지 않거나 잘못 선택되어 있을 때
이 경우, 타겟을 선택해주면 된다. Perspective가 Java인 경우 타겟을 선택할 수 없으므로 DDMS로 들어가 타겟을 선택해준다.

2. LogCat 버그로 추정되는 상황으로 지나치게 많은 로그가 올라갔을 경우 몇개의 옛날 로그만 보여주는 경우가 발생
LogCat에 보면 Clear 버튼이 있다. Clear 버튼을 클릭하여 준다.


허접한 글이지만, 도움이 되신다면 아래 손가락 꾹 눌러주세요.
드디어 안드로이드 마켓에 개발자 등록을 했다.

전화번호 입력에 한번 삽질을 하고

Billing Address가 뭔지 몰라 또 삽질을 했다.

전화 번호 입력할때 +82-{제일 앞 0을 뺀 전화번호}를 해야 한다.
예를 들어 +82-2-1234-5678

빌링 어드레스는 뭔지 몰라 그냥 집주소 입력

결제 대기 상태인듯 한데 기다리고 있다.

내일 간단한 테스트 앱을 하나 등록해봐야겠다.

App이 아니라, 안드로이드를 빌드해보자.
기본 내용은 아래 글 참조
http://source.android.com/source/download.html
http://rookiecj.tistory.com/193

이 내용은 JDK 1.5를 다운로드 받는 법을 포함하고 있음

우분투 32비트 리눅스 기준으로 설명함.
(root로 진행하고 있으나, 설명은 원본대로 sudo를 붙여서 진행)

1. 관련 Utility를 다운로드 받는다.
    원래 메뉴얼에서 sun-java5-jdk를 뺐는데 이유는 sun-java6-jdk로 업버전되면서 sun-java5-jdk가 없어졌다.
$ sudo apt-get install git-core gnupg flex bison gperf libsdl-dev libesd0-dev libwxgtk2.6-dev build-essential zip curl libncurses5-dev zlib1g-dev
   필요하면 발그린드도 설치
$ sudo apt-get install valgrind

2. jdk 1.5 다운로드
    http://java.sun.com/javase/downloads/index_jdk5.jsp
    중간쯤 내려보면 JDK 5.0 Update 22 라는 글자 옆에 Download를 누른다.
    뭔가 정보를 입력하라는 창이 보일 것이다.
    적당히 입력해주고 submit하면 적었던 e-mail로 jdk1.5를 받을 수 있는 URL이 전송된다.
    이메일을 이용해 해당 URL에 접속하면 jdk 1.5를 받을 수 있다.
    이 때, jdk 1.5 파일이 .bin으로 끝나는 파일이다.
    이 파일에 실행권한을 주고 실행하면 압축이 풀린다.
    $ chmod +x jdk-1_5_0_22-linux-i586.bin
    압축이 풀린 파일을 적당한 위치에 넣는다.
    $ mv jdk1.5.0_22 /usr/
    아래 환경변수를 설정한다. 나는 그냥 ~/.bashrc에 정보를 넣어버렸다.
export JAVA_HOME=/usr/jdk1.5.0_22
export PATH=~/bin:$JAVA_HOME/bin:$PATH
export ANDROID_JAVA_HOME=$JAVA_HOME


3. source를 다운로드 받는다.
    아래 색칠한 명령들을 실행

  1. Make sure you have a~/bindirectory in your home directory, and check to be sure that this bin directory is in your path:
    $ cd ~
    $ mkdir bin
    $ echo $PATH
  2. Download thereposcript and make sure it is executable:
    $ curl http://android.git.kernel.org/repo > ~/bin/repo
    $ chmod a+x ~/bin/repo
  3. 작업 폴더 생성
  4. $ mkdir mydroid
    $ cd mydroid
  5. 작업 폴더 생성(다소 오래 걸린다.)
  6. $ repo init -u git://android.git.kernel.org/platform/manifest.git
    $ repo sync
 
4. 빌드한다.
    make
(또는 make sdk)

JDK 어쩌구 에러나면 위에 지정한 경로가 맞는지 확인해봐야 한다.

허접한 글이지만, 도움이 되셨다면 아래 손가락 꾹 눌러주세요.

김선운님에게 도움이 될까 싶어 정리해봅니다.

안드로이드는 sqlite3을 쓰는데 sqlite3이 리눅스에서는 정말 사용하기 편하지만 윈도우에서 사용하려면 빌드까지 해야 하는 꽤 불편할 수 있습니다.

하지만 안드로이드 에뮬레이터 안에는 이미 sqlite가 있습니다.
이것을 활용하여 내가 만든 DB가 어떤 상태에 있는지 확인해 보고자 합니다.

1. 먼저 콘솔 창을 하나 띄웁니다.
시작 => 실행(R)을 클릭하고 cmd를 입력

2. 안드로이드 SDK가 있는 경로로 이동합니다.
   (저의 경우 h:\project\android2\android-sdk-windows\tools를 사용합니다.)
> cd h:\project\android2\android-sdk-windows\tools
> h:

3. adb 쉘에 접속합니다.
h:\project\android2\android-sdk-windows\tools> adb shell
#

4. 자신이 만든 프로젝트가 있는 곳으로 이동합니다.
이 때 리눅스 명령어들을 사용해야 합니다. 몇가지 정도만 알고 쓰시면 유용합니다.
 ls : 현재 폴더의 파일, 서브 폴더 목록을 출력합니다.
      ls는 권한이 없는 곳에서 수행하면 Permission denied 에러가 날 수 있습니다.
cd [폴더명] : 폴더명으로 이동합니다.
pwd : 현재 폴더 위치를 출력합니다.

경로는 /data/data/패키지명 입니다.
이전 DB 예제에서는 이 아래에 databases라는 폴더를 하나 더 만들었으므로 한단계 더 아래에 파일이 존재합니다.

# cd /data/data/com.sohon.sample
# ls
ls
play_seq.dat
shared_prefs
databases
lib
#

5. sqlite를 통해 데이터베이스 파일을 엽니다.
# sqlite3 databases/lecture.db
sqlite3 databases
SQLite version 3.5.9
Enter ".help" for instructions
sqlite>

6. sql을 통해 정보를 확인합니다.
sqlite> select * from sqlite_master;
select * from sqlite_master;
table|lecture|lecture|2|CREATE TABLE lecture (_id integer primary key, eng_sente
... 기타 테이블 커럼 정보들)
sqlite>

허접한 글이지만, 도움이 되셨다면 아래 손가락 꾹 눌러주세요.
출처 : http://psjin14.tistory.com/entry/AndroidGallery%EC%97%90-Image-%EC%B6%94%EA%B0%80-%ED%95%98%EA%B8%B0
ps> 예섬아, 이렇게 해도 되는 설정을 해놓고 있단다. CCL도 꼭 신경써서 보도록 하렴
약간의 코멘트 덧붙임
ps2> 궁금한 내용 있으시면 질문 주시면 답변 드립니다.

아래는 예섬이 장장 2시간 동안 적은 글 ㅋㅋ
근데 글자가 너무 많아서 읽기가 싫어진다 ;;
역시 난 소스 보는게 좋은 것 같다.

내가 Gallery에서 필요한 기능은 다음과 같다.
 Gallery 요구사항
  (1) Gallery에 내가 원하는 Image 추가하기
  (2) 사용자의 선택으로 인해, Gallery 중앙에 최정적으로 표시된 Image가 무엇인지 알기
    Ex>  Finger Flick을 하는 경우, Flick이 완료 될 때 화면에 선택된 Image 알기

이 2가지 요구사항을 만족할 수 있는 예제를 인터넷에서 찾았으니, 찾을 수가 없었다.

대신, Android Developer Guide에서 Hello, Gallery라는 예제를 찾았으나 !!

이런.. 그대로 작성하면, Error가 나거나 System이 오동작을 한다. ㅜ.ㅜ
  * Hello, Gallery url : http://developer.android.com/guide/tutorials/views/hello-gallery.html

몇 가지 시행착오 후,  요구사항을 만족할 수 있는 Android Code를 작성하였다.
 요구사항을 만족하여, 실행된 화면
 
  > Linear Layout에 Gallery와 Text View를 추가하였다.
> Gallery 상에서 Image의 위치를 표시하기 위해, Text View를 추가하였다.

(1) Layout으로 사용할 xml 파일 만들기
 파일명 : layout > my_gallery.xml
 

특별히 관계없는 기타 팁
  1)  Gallery에 Image View를 추가하지 않아도 된다.
     * Gallery에 Image를 추가하는 것은 Code 상에서 할 예정이다.

  2) Fling의 결과로 선택된 Image 위치(Position)를 알기 위해서, Text View를 추가하였다.

  3) Linear Layout의 default orientation은 horizontal이다.
     => 그러므로, 꼭 orientation을 vertical로 명시해 주자.
       -> 그렇지 않으면, Text View가 화면에 표시되지 않을 것이다.

(2) 실행화면의 각 Image에서 보이는 테두리 속성용 value 파일 만들기
 파일명 : values > gallery_attri.xml
 


(3) Activity 클래스 작성하기
 파일명 : src > ActMyGallery.java
 

  1) android.app.Activity를 Super Class로 지정하여, Class를 생성하자.

  2) OnCreate 함수를 Override하자.
       (a) 이 Activity가 실행될 때의 Layout을 설정하기 위해, setContentView 함수를 호출한다.
       (b) Gallery에 Image 추가 및 Image에 대한 정보를 알 수 있도록, Adapter를 설정해 준다.
            - Gallery 클래스의 setAdapter 함수 이용
            * ImageAdapter는 미작성 클래스임. 그래서 setAdapter 라인을 추가하는 순간, Error가 날 것이다

(4) ImageAdapter 클래스 추가하기
 파일명 : src > ActMyGallery.java
 

  1) BaseAdapter를 Super Class로 하는 Class를 작성한다.
    => 단, Activity 클래스 내에 작성해야 한다.
     -> 그렇지 않으면, 몇몇 함수들은 정의되지 않았다고 Error가 발생할 것이다.
    (꼭 그럴 필요는 없음)
  2) Gallery에 추가할 Image들을 res/drawable 폴더에 추가한다.

  3) 위 소스 코드의 핵심 함수는 getView가 되겠다.
    =>이 함수는 Gallery의 위치에 있는 Image View를 반환하는 함수이다.
      -> 이 함수에서, 각 Position에서 보여야 할 Image에 대한 설정을 해 주고 있다.
        (a) ImageView.setImageResource()
            : Image Resource ID를 설정하여, ImageView에서 표시 할 Image를 설정하고 있음

        (b) ImageView.setLayoutPrarms(new Gallery.LayoutParams(150, 100)
            : 150은 width이고, 100은 height임

        (c) ImageView.setScaleType(ImageView.ScaleType.FIT_XY)
           : Imae가 150X100에 맞도록, Scale을 조정함

       (d) ImageView.setBackgroudnResource(background)
          : 실행된 화면에서, 각각의 ImageView에 회색 테두리가 보이도록 함

  4) 생성자에 있는 아래 항목들은 이미 (2)번에서 작성한 내용들이다.
      - R.styleable.Theme
      - R.styleable.Theme_android_galleryItemBackground

  5) 수행하면, 1번째 요구사항이 만족된 것을 확인할 수 있음

(5) 2번째 요구사항을 만족하기 위해, onCreate 함수 수정
 파일명 : src > ActMyGallery.java
 onCreate 함수 안에 안의 내용을 추가하였음
  1) setOnItemSelectedListener 함수를 이용하면, 2번째 요구사항을 만족할 수 있다.
    => 정확히는 OnItemSelectedListener.onItemSelected() 이지만..
      -> 해당 함수의 3번째 인자로 들어오는 Int는 Galley 상의 Image 위치이다.
      -> 그래서 position value를 TextView에 표시되도록 설정하고 있다. [TexvView.setText() 이용]

  2) 주석 처리된 부분을 해제하면, 사용자가 Click(정확히는 Push)한 Image를 알 수 있다.
   * Hello, Gallery 예제에는 setOnItemClickListner 함수가 있음.
     => 그러나 내가 원한 것은 Press 할 때 클릭된 Image 정보가 아니다.
     => 요구사항은 Release할 때, 표시될 Image 정보이다.
      -> 그래서, 해당 소스를 주석처리하였다.
이상!!

허접한 글이지만, 도움이 되신다면 아래 손가락 꾹 눌러주세요.
GalleryView는 작은 이미지를 화면에 출력하는데에는 적합할 수 있으나 화면을 채운 아이템들을 움직이는데는 부적합한 것 같다.

예를 들어 화면을 꽉 채운 GalleryView에 이미지가 5개 있고, 현재 1번 이미지를 보고 있다고 가정하자.
사용자가 화면에 flick을 통해 2번, 3번 이미지를 보고 싶을 수 있겠으나
GalleryView에서 flick을 발생하면 거의 바로 5번 이미지로 이동해버린다.
아주 천천히 스크롤하는 경우가 아니면 2,3번 이미지를 보긴 매우 어려운데

만약 flick할 때마다 한개의 이미지만을 넘기고 싶은 거라면, GalleryView로는 불가능 할 것 같다.

그래도 GalleryView를 짜기 버거워 어쩔수 없이 쓰던 GalleryView에 약간의 트릭을 해보았다.

일단 GalleryView를 상속 받고 onFling을 override한다.
onFling의 인자 가운데 새번째 인자인 velocityX의 값을 절반으로 나누어 부모 클래스의 onFling을 호출한다.

생각한 것만큼 좋은 효과를 보여주진 못하지만,
당장 써먹을 수 있는 수준인 것 같다.

궁극적으로는 GalleryView를 다시 짜야 할 것 같다 ;;

허접한 글이지만, 도움이 되셨다면 아래 손가락 꾹 눌러주세요.
  1. 2011.03.15 10:26

    비밀댓글입니다

    • 소혼 2011.03.15 21:17 신고

      기본적으로는 onfling을 오버라이드하셔서 쓸 수 있습니다.

      저 같은 경우에는 동작은 확인했지만 다른 문제가 있어서 실제로 사용하진 못했습니다.

      특별히 복잡한 구현이 아니라면 이 방법으로 해결하셔야 할 듯 합니다.

+ Recent posts