색상 필터

Android 2012. 7. 11. 13:48

PorterDuffColorFilter

 

생성자는 다음과 같다.

 

PorterDuffColorFilter(int srcColor, PorterDuff.Mode mode)

 

srcColor는 입힐 필터 색상이겟고.. mode라.. enum값이니 뭐가 잇나 한번 볼까..?

 

Enum Values
PorterDuff.Mode ADD Saturate(S + D)
PorterDuff.Mode CLEAR [0, 0]
PorterDuff.Mode DARKEN [Sa + Da - Sa*Da, Sc*(1 - Da) + Dc*(1 - Sa) + min(Sc, Dc)]
PorterDuff.Mode DST [Da, Dc]
PorterDuff.Mode DST_ATOP [Sa, Sa * Dc + Sc * (1 - Da)]
PorterDuff.Mode DST_IN [Sa * Da, Sa * Dc]
PorterDuff.Mode DST_OUT [Da * (1 - Sa), Dc * (1 - Sa)]
PorterDuff.Mode DST_OVER [Sa + (1 - Sa)*Da, Rc = Dc + (1 - Da)*Sc]
PorterDuff.Mode LIGHTEN [Sa + Da - Sa*Da, Sc*(1 - Da) + Dc*(1 - Sa) + max(Sc, Dc)]
PorterDuff.Mode MULTIPLY [Sa * Da, Sc * Dc]
PorterDuff.Mode OVERLAY
PorterDuff.Mode SCREEN [Sa + Da - Sa * Da, Sc + Dc - Sc * Dc]
PorterDuff.Mode SRC [Sa, Sc]
PorterDuff.Mode SRC_ATOP [Da, Sc * Da + (1 - Sa) * Dc]
PorterDuff.Mode SRC_IN [Sa * Da, Sc * Da]
PorterDuff.Mode SRC_OUT [Sa * (1 - Da), Sc * (1 - Da)]
PorterDuff.Mode SRC_OVER [Sa + (1 - Sa)*Da, Rc = Sc + (1 - Sa)*Dc]
PorterDuff.Mode XOR [Sa + Da - 2 * Sa * Da, Sc * (1 - Da) + (1 - Sa) * Dc]

 

[Sa + Da - Sa*Da, Sc*(1 - Da) + Dc*(1 - Sa) + min(Sc, Dc)] ??

[Sa + Da - Sa * Da, Sc + Dc - Sc * Dc] ??

[Sa, Sa * Dc + Sc * (1 - Da)]  ?????????

 

이게 뭔 말이여.. 아래 링크로 가서 확인 ㄱㄱ..

 

http://softwyer.wordpress.com/2012/01/21/1009/

 

조만간 저런 shape model 말고 사진을 소스로 한걸 올리겟음..

당장은 바빠서 GG..

 

아래는 테스트에 사용된 이미지이고.. 사용된 컬러 값은 0xFFFFFF00 (노랑) 입니다.


겹쳐지는 컬러 값만으로 하니 예제로 부적절 하네요..ㅋㅋ

더 아래에 있는 이미지는 위 사이트에서 퍼온 이미지입니다.

 




Posted by 독뽀
,

http://android-developers.blogspot.com/2009/01/avoiding-memory-leaks.html

 

'Android' 카테고리의 다른 글

ViewFlipper의 애니메이션 리스너 추가하기  (0) 2012.07.17
색상 필터  (2) 2012.07.11
Android code snippets  (0) 2011.05.11
CalledFromWrongThreadException  (0) 2011.05.04
SurfaceView 기본 개념  (0) 2011.04.11
Posted by 독뽀
,

Android code snippets

Android 2011. 5. 11. 13:39
전체 화면으로 액티비티 사용하기

http://www.androidsnippets.com/how-to-make-an-activity-fullscreen

인터넷이 가능한지 확인하기

http://www.androidsnippets.com/have-internet

어플리케이션 완전 종료시키기

 http://www.androidsnippets.com/kill-you-application

경고창에서 사용자에게 텍스트 입력받기

http://www.androidsnippets.com/prompt-user-input-with-an-alertdialog 

'Android' 카테고리의 다른 글

색상 필터  (2) 2012.07.11
Android 메모리 릭 피하기 번역  (0) 2012.06.12
CalledFromWrongThreadException  (0) 2011.05.04
SurfaceView 기본 개념  (0) 2011.04.11
AbsoluteLayout has been deprecated.  (0) 2011.02.08
Posted by 독뽀
,

메인 쓰레드(UI 쓰레드)가 아닌 쓰레드에서 시간이 걸리는 작업, UI 업데이트 시에는

핸들러를 통해 우회하는 방법을 사용한다.

참고자료: "Handler와 AlarmManager를 통한 Timer 작업 처리"
출처: 안드로이드펍(http://www.androidpub.com/)

검색중 찾은 곳:
http://binsolb.tistory.com/entry/CalledFromWrongThreadException

'Android' 카테고리의 다른 글

Android 메모리 릭 피하기 번역  (0) 2012.06.12
Android code snippets  (0) 2011.05.11
SurfaceView 기본 개념  (0) 2011.04.11
AbsoluteLayout has been deprecated.  (0) 2011.02.08
안드로이드 기본 셋팅  (0) 2011.01.10
Posted by 독뽀
,

SurfaceView 기본 개념

Android 2011. 4. 11. 15:49
안드로이드에서 기본적으로 제공되는 컴포넌트들(ImageView, TextView, Layout 등)은

빠른 화면 갱신을 요하는 게임이나 실시간 그래프 등의 작업에서는 깜빡이는 현상이 일어난다.

현재 화면에 나타나 있는 UI에서 직접 그리는 작업을 하는 동안 사용자 입력을 받을 수 없는 상태이며

어떤 동작 후 화면에 뿌려지기까지 시간이 길어진다면 긴 대기상태에 대한 종료를 묻는 팝업이 뜨게 된다.(ANR)

그리기를 위해 안드로이드에서는 더블버퍼링 방식의 SurfaceView를 제공하고 있다.

더블버퍼링이란 화면에 보이지 않는 영역에서 어떤 공간에(실제로는 메모리 상에) 그림을 그린 후

UI에 붙이는 방식인데, 앞서 깜빡이는 현상의 경우 싱글버퍼링이기 때문이다.

싱글버퍼링은 메인UI에서 그림을 그리는 동작을 수행하기 때문에 그림을 그리는 동안에는

결국 메인 스레드 작업이기 때문에 사용자와 인터랙션을 할 수 없다.


이런 SurfaceView에는 꼭 알아야할 몇 가지 요소가 있다.

먼저 SurfaceView는 View를 상속받았기 때문에 setContentView 메서드를 통해 붙여넣기가 가능하다.

ex) setContentView(new MySurfaceView(this));

SurfaceView는 현재 메인 스레드가 아닌 보이지 않는 영역에서 그림을 미리 그린다고 했다. 

그 공간을 Surface라 하며 그 공간에 그림이 그려질 영역을 설정하는 부분은 Canvas를 통해 한다.

Canvas는 그림이 위치할 도화지 혹은 Layout의 개념으로 봐도 무방했다.(개인적인 생각)

현재는 배경 색이나 정렬 등을 수행할 수는 있으나 원하는 작업을 모두 할 수는 없는 도화지 상태이다.

Canvas가 올려질 영역은 Bitmap이다.

Bitmap에 올라간 Canvas는 SurfaceHolder를 통해서 Surface에 붙여진다.

결국 SurfaceHolder가 없으면 메모리상에서 그리기만 수행하고 보여지진 않은 꼴이 되며 보여줄 수가 없다. 

SurfaceHolder의 경우 SurfaceView 생성자 직후 호출되는 public void surfaceCreated(SurfaceHolder holder) 메서드에서

필드로 받아 사용하는 방법이 있다.

SurfaceHolder를 통해 SurfaceView에 붙이는 과정은 다음과 같다. (편의상 Paint와 Bitmap의 초기화 과정은 생략)

1. 그릴 Canvas를 생성한 후 그 Canvas를 잠근다.

mCanvas = mHolder.lockCanvas();



SurfaceHolder를 통해 잠긴 Canvas를 반환받아 다른 thread 등에서의 접근을 막는다.

2. Canvas에 Bitmap을 추가하거나 Canvas의 색상 정보 등을 입력한다.

mCanvas = drawColor(0xFFECECEC);
mCanvas.drawBitmap(mBitmap, 0, 0, mBitmapPaint); 


3. 잠긴 Canvas를 푼다.

mHolder.unlockCanvasAndPost(mCanvas);


3 과정이 빠진 경우에 해당 Canvas를 다른 곳에서 접근하려 하면

해당 Canvas를 인자로 넘긴 곳에 잘못된 인자 정보라는 에러가 뜨게 된다.

또한 3 과정에서의 메서드 이름에서 알 수 있듯이

실제로 Canvas의 락이 해제되고 mHolder를 통해 Canvas가 보여지는 과정이다.
 

'Android' 카테고리의 다른 글

Android 메모리 릭 피하기 번역  (0) 2012.06.12
Android code snippets  (0) 2011.05.11
CalledFromWrongThreadException  (0) 2011.05.04
AbsoluteLayout has been deprecated.  (0) 2011.02.08
안드로이드 기본 셋팅  (0) 2011.01.10
Posted by 독뽀
,

 

더 쓰지말라는 AbsoluteLayout을 대체할 방법들

margin을 이용한 트릭 관련 내용들

http://blog.vizpei.kr/67456989

'Android' 카테고리의 다른 글

Android 메모리 릭 피하기 번역  (0) 2012.06.12
Android code snippets  (0) 2011.05.11
CalledFromWrongThreadException  (0) 2011.05.04
SurfaceView 기본 개념  (0) 2011.04.11
안드로이드 기본 셋팅  (0) 2011.01.10
Posted by 독뽀
,

제일 먼저 할 일은 http://java.sun.com 에 가서 최신 버전의 JDK를 다운받는 일이다.
별거 없다, 2011-01-10 기준, JAVA SE 6 Update 23을 받도록 하자, 7은 테스트 중이다..

참고) 1.6 버전부터는 JAVA 1.6이 아니라 JAVA 6라고 한다.





간혹 서버를 찾을 수 없다고 할 때가 있는데 뒤로 가기 하고 다시 누르면 잘~ 된다.

설치야 뭐 다음 다음이 전부이니 생략.

다음은 이클립스를 깔자.

http://www.eclipse.org

Downloads 탭을 누르면 여러 버전이 있는데 Classic 버전을 받도록 한다.

자신의 비트에 맞는(32bit/64bit) 버전을 받도록 하고 압축을 해제하면 설치가 끝난 것이다.

원하는 경로로 압축 해제한 폴더를 이동해주자. C:\ 바로 아래도 좋고, C:\Program Files\ 폴더도 좋다.

여기까지는 자바를 위한 과정이었다.

안드로이드가 필요 없는 사람은 이클립스를 가장 가벼운 Eclipse IDE for JAVA Developer 버전을 받도록 하자.



지금부터는 안드로이드를 위한 과정이다.

먼저 이클립스를 실행해보자.

주 작업 폴더를 설정하는 창은 원하는데로 설정하고 귀찮으니 체크하고 확인 눌러주자.

이제 이클립스의 탭 메뉴 중에서 Help > Install New Software를 선택한다.




위와 같이 Name과 Location에 입력을 하고(알겠지만 Name은 아무렇게나 해도 상관은 없다.)

OK를 누르면 Add Repository 창이 닫히고

Tehre is no site selected. 라고 써있는 창에 아래와 같은 다운로드 가능 목록이 뜰 것이다.


모두 선택하고 Next를 누른다. Finish가 바로 안되는 이유는 라이센스 동의 때문이다.

다음 창에서 라이센스에 모두 동의한다고 굳이 말해주고 Finish를 누르면 설치가 시작된다.

마무리가 되면 이클립스를 다시 시작한다고 하는데 당연히 확인을 눌러주면 알아서 재시작 해 준다.

다음으로는 ADT(Android Development Tool-kit)을 설치할 차례이다.

위의 설치는 플러그인이고, 실제 에뮬레이터 설치가 바로 다음 과정이다.

http://developer.android.com 으로 가서 다운받는다.



이클립스처럼 아무데나 풀어놓되 어디 풀었는지 꼭 기억해야한다.

이클립스에서 저 폴더의 경로를 지정해야하기 때문이다.



SDK Location에 압축을 푼 폴더의 경로를 입력한다. (Browse를 클릭해서 폴더를 찾아 선택해도 된다.)

Apply를 클릭하면 이상한 말을 하는 경우가 종종 있는데 무시하자.

OK를 누르고 환경설정 창을 나온 뒤 이클립스에 생긴 안드로이드 마크를 클릭한다.


Android SDK and AVD Manager가 뜨는데 New를 선택한다.

아래와 같이 대충 입력 후! Create AVD를 선택!


이제 아래와 같이 AVD가 생성된 것을 볼 수 있는데 Froyo를 선택하고 Start를 눌러보자!



이제 끝낫다.. 다음에는 어플에서 놀아보자!


'Android' 카테고리의 다른 글

Android 메모리 릭 피하기 번역  (0) 2012.06.12
Android code snippets  (0) 2011.05.11
CalledFromWrongThreadException  (0) 2011.05.04
SurfaceView 기본 개념  (0) 2011.04.11
AbsoluteLayout has been deprecated.  (0) 2011.02.08
Posted by 독뽀
,