검색결과 리스트
Android에 해당되는 글 13건
- 2017.10.30 AndroidStudio XML Preview 에서 한글이 깨지는 현상 해결법
- 2017.10.17 draw9patch 실행하기
- 2013.12.03 이클립스에서 안드로이드 소스보기
- 2013.05.14 애니메이션 효과
- 2013.05.14 view 에 대한 고찰
- 2013.05.14 view 가 그려지기 전에 사이즈 가져오기
- 2013.05.10 BitmapDrawable과 Bitmap 변환
- 2011.12.08 SVN으로 소스받은 안드로이드 프로젝트 인식시키기
- 2011.10.20 안드로이드4.0 '아이스크림샌드위치'에서 달라진 5가지
- 2011.10.17 [Android] Activity 생성시에 사용되는 Intent Flag 정리
글
AndroidStudio XML Preview 에서 한글이 깨지는 현상 해결법
- 원인
-한글 폰트가 없어서.
- 해결법
-Mac OS : 터미널에서 아래 명령어 입력 (-d 이후의 경로는 본인pc의 studio 설치경로를 확인하여 다를경우 바꾸어야합니다.
curl https://gist.githubusercontent.com/skyisle/4d98cbcdc259601fba0f07602667b1b9/raw/0da59a462366f2d5165e112648a549cb705e9e15/korean_font.diff | patch -p1 -d /Applications/Android\ Studio.app/Contents/plugins/android/lib/layoutlib/data/fonts/
-windows : 다음의 경로를 찾으셔서 직접 수정해주셔야 합니다.
Android Studio 2.2가 설치된 경로에서 다음의 경로를 추가로 따라가셔서 fonts.xml
을 열어 추가해주시면 되겠습니다.
plugins/android/lib/layoutlib/data/fonts/fonts.xml
-출처 http://thdev.tech/androiddev/2016/09/21/Android-Studio-Layout-Preview-Not-Korean.html
설정
트랙백
댓글
글
http://www.oracle.com/technetwork/java/javase/downloads/index.html
- mac os
- cmd 에서 java -jar <파일명.jar>
- window os
- 메모장 하나생성
- 메모장에 java -jar <파일명.jar> 입력후 확장자를 .bat으로 저장후 실행
설정
트랙백
댓글
글
Install plugin Android Source by going to Help->Install New Software-> add this site: "http://adt-addons.googlecode.com/svn/trunk/source/com.android.ide.eclipse.source.update/". Select Android Sources from the list, click Next, and install like usual. Restart Eclipse when prompted.
If sources are still not attached, attach them manually. You will find the sources in the plugin folder usually ECLIPSE_PATH\plugins\com.android.ide.eclipse.source_MAY_BE_VARY\VERSION Depending of the version of Android, they'll be in the different folders. (eg: for Android 4.4 the sources are in folder named 14). Sources will be in source.zip archive.
설정
트랙백
댓글
글
설정
트랙백
댓글
글
http://underclub.tistory.com/339 - 뷰가 그려지는 과정
http://aroundck.tistory.com/234 - customView 시 override해야 할 function 들
설정
트랙백
댓글
글
view.measure(MeasureSpec.UNSPECIFIED,MeasureSpec.UNSPECIFIED);
int width = view.getMeasuredWidth();
int height = view.getMeasuredHeight();
텍스트는
textPaint.measureText(text)
설정
트랙백
댓글
글
보통 BitmapFactory의 decode 함수들은 메모리 Leak이 존재한다고 알려져 있습니다.
(2.1에서 수정이 되었는지 아직도 그대로인지는 잘 모르겠습니다.)
실제로 안그럴지 몰라도,
decode를 하면 할 수록 메모리 Leak의 위험부담은 더 커지기 마련이죠.
제가 처음에 Drawable을 Bitmap으로 바꿀 때 BitmapFactory를 사용 했었습니다.
정확히 말하면 Drawable을 Bitmap으로 바꾼 것이 아니라
RawResource를 InputStream으로 얻어와서 BitmapFactory로 decode한 것이었죠.
Bitmap bitmap;
InputStream stream;
stream = context.getResources().openRawResource(resource);
try {
bitmap = BitmapFactory.decodeStream(stream);
}
finally {
try { stream.close(); }
catch(IOException e) {}
}
하지만 위의 코드는 계속 BitmapFactory를 호출 하기 때문에
잠재적인 위험을 가지고 있습니다.
그렇다면 리소스로 부터 Bitmap을 얻어내고 싶다면 어떻게 해야 할까요?
[Googling...]
일단 포스팅 하기전에 구글링을 좀 해봤습니다.
상위 몇개의 검색 결과를 살펴보니...
구글링으로 살펴본 결과들은 대부분 아래와 같이 되어있었습니다.
Bitmap bitmap = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(bitmap);
drawable.setBounds(0, 0, w, h);
drawable.draw(canvas);
1. 빈 Bitmap을 만들고
2. Canvas를 연결 한 뒤
3. Drawable의 draw메소드를 통해 Bitmap과 연결된 Canvas에 Drawable의 내용을 그립니다.
물론 이 방법이 틀린 것은 아닙니다.
하지만 만들어 줘야 하는것이,
1. Drawable 크기만한 빈 Bitmap
2. Bitmap에 연결할 Canvas
3. 크기를 가지는 Width, Height 변수
Drawable 객체를 제외하고 두개의 객체와 두개의 변수를 더 만들어야 합니다.
중간에 setBounds() 메소드도 호출 해야 겠죠.
근데 여기서 한가지 잘 생각해 봐야 할 것이 있습니다.
View안에서는 Drawable을 잘 사용해서 이미지를 표시해 주고 있다는 점입니다.
Layout XML 파일 안에서 ImageView의 이미지를 지정해 줄 때
Drawable을 잘~ 사용해왔다는 것이 하나의 예가 될 수 있겠네요.
그렇다면 Drawable이 당연히 Bitmap을 가지고 있어야 하지 않을까요?
[BitmapDrawable]
질문에 대한 답은 바로 BitmapDrawable에 담겨있습니다.
아래의 코드를 보시죠!
BitmapDrawable drawable =
(BitmapDrawable) getResources().getDrawable(R.drawable.icon);
Bitmap bitmap = drawable.getBitmap();
읭...? 이게 끝입니다.
BitmapDrawable을 사용하면 Bitmap을 손쉽게 얻어 올 수 있습니다.
위의 길고 긴 코드가 단 두 줄로 줄어 들었습니다.
따로 Bitmap을 만들지 않아도 됩니다.
그냥 Drawable안에 있는 Bitmap을 사용하기만 하면 됩니다.
[주의사항!]
BitmapDrawable을 사용하면 손쉽게 Bitmap을 얻을 수는 있지만,
Drawable이 꼭 BitmapDrawable만 존재 하는 것은 아닙니다.
대표적인 예로 ShapeDrawable이 있을 수 있겠네요.
ShapeDrawable을 사용하면 원하는 도형(Shape 객체)을 Drawable로 사용 할 수 있습니다.
하지만 getBitmap() 메소드가 없기 때문에
ShapeDrawable로 부터 Bitmap을 얻어 올 수는 없습니다.
굳이 도형을 Bitmap으로 바꾸고 싶다면 위에서 봤던 빈 Bitmap과 Canvas를 만들어서
draw() 메소드를 통해 그리는 방법 밖에는 없습니다.
아마도 대부분의 경우 drawable 디렉토리에 있는 이미지들을 Bitmap으로 사용하려고 하지,
Shape을 Bitmap으로 사용하려고 하지는 않을 거라 생각합니다.
네네... 그럴겁니다...
[BitmapDrawable Bitmap의 특징]
BitmapDrawable에서 얻어온 Bitmap 객체는 보통녀석이 아닙니다.
특징을 한번 살펴 봅시다.
1. 우선, Bitmap을 얻어 올 때는 final 입니다.
레퍼런스에 보면 final로 선언되어 있습니다.
즉, 변경하지 않겠다는 의지를 표현 한 것이죠.
사실 리턴에 final을 붙여봤자 대입되는 변수와는 아무 상관이 없습니다... 네... 넘어가죠.
2. Immutable 입니다.
좀 더 강력한 녀석이 나왔습니다. Immutable, 즉, 변경 불가입니다.
Canvas canvas = new Canvas(bitmap);
만약 위와 같은 시도를 한다면, 아래와 같은 Exception이 발생 할겁니다.
Caused by: java.lang.IllegalStateException: Immutable bitmap passed to Canvas constructor
3. 절대 recycle() 메소드를 호출 해서는 안됩니다!
Bitmap을 얻어와서 그릴거 다 그렸다고 무의식적으로 recycle() 메소드를 호출 했다...
그럼 아래와 같은 메세지를 볼 수 있습니다.
java.lang.RuntimeException: Canvas: trying to use a recycled bitmap android.graphics.Bitmap@43774438
위의 상황은 ImageView 같은데서 사용하고 있던 Drawable의 Bitmap 객체를 얻어와서
그 Bitmap 객체에 recycle() 메소드를 호출 한 상황입니다.
한마디로 Bitmap 객체를 공유해서 사용한다고 볼 수 있겠죠.
[One more Tip - Bitmap copy]
그렇다면 BitmapDrawable로 부터 얻어낸 Bitmap 객체를
마음대로 바꾸고, 쓰고, 버리고 싶다면 어떻게 해야 할까요?
그냥 copy() 하면 됩니다.
Bitmap bitmap = drawable.getBitmap().copy(Config.ARGB_8888, true);
Mutable로 복사하면 마음대로 변경해서 사용 할 수 있습니다!
[Outro]
이번에는 BitmapDrawable과 Bitmap에 대해서 살짝 살펴보았습니다.
앞에서는 BitmapDrawable을 Bitmap으로 바꾸는 이야기만 했었지만,
반대로 Bimap을 Drawable로 바꾸고 싶다면
BitmapDrawable의 생성자를 사용하면 간단히 Drawable로 만들 수 있습니다.
물론 구글링해서 찾은 방법이 틀린 방법은 아닙니다.
이미지와 관련이 없는 Drawable을 다루고자 할 때는
번거롭게도 draw() 메소드를 이용 해야 하는것이 맞지만,
이미지와 관련된 Drawable을 다루고자 할 때는 분명 BitmapDrawable을 사용하는 것이 더 편합니다.
네... 제가 하고 싶은말은 그겁니다.
이미지 파일 힘들게 바꾸지 맙시다!
설정
트랙백
댓글
글
딱히 이클립스에서 처리하는법은 몇번 시도해봤지만 잘 모르겠음 ㅜ.ㅜ
출처 : http://blog.naver.com/PostView.nhn?blogId=calmroad&logNo=100132140638&parentCategoryNo=51&viewDate=¤tPage=1&listtype=0
설정
트랙백
댓글
글
구글은 19일 홍콩에서 열린 삼성 구글 미디어 행사를 통해 새로운 안드로이드4.0 운영체제(아이스크림샌드위치)를 전격 공개했습니다. 그럼 안드로이드 4.0에서 핵심적으로 달라진 5가지를 알려드리겠습니다.
1. 스마트폰+태블릿 운영체제 통합
스마트폰과 태블릿PC로 나뉘어져 있던 안드로이드 운영체제(OS)를 하나로 통합한 새로운 플랫폼입니다. 아이스크림샌드위치는 종전 태블릿PC용 OS였던 허니콤의 주요 기능을 수용하면서도 새로운 기능을 대거 추가했습니다. 구글은 이번 안드로이드4.0 운영체제를 전환점으로 삼아 애플의 iOS와 차별성을 부각시켰습니다.
2. 차별화된 애플리케이션 탑재와 카메라기능강화
아이스크림샌드위치는 새로운 기본 애플리케이션을 담았습니다. '피플(People)' 앱은 사용자의 연락망과 소셜네트워크(SNS)를 연동되게해줍니다. 구글플러스가 시연됐지만 다른 서비스도 가능하다고 합니다. 또한 카메라 촬영기능이 완전히 재구성돼었으며 파노라마 기능이 내장되었으며 1080p화질 영상녹화가 가능하다고 합니다.
3. NFC(근거리무선통신) 기술적용
NFC(근거리무선통신) 기술을 이용해 스마트폰의 콘텐츠를 공유할 수 있는 안드로이드빔(Android Beam)이 탑재되었습니다. NFC 기능이 탑재된 2개의 휴대폰을 갖다대면 앱, 연락처, 음악, 비디오 등을 서로 공유할 수 있습니다. 예를 들어 자신이 좋아하는 게임을 친구에게 소개하고 싶을 때 게임을 실행시킨 후 친구의 스마트폰에 갖다된 뒤 `전송' 버튼만 누르면 곧바로 친구의 스마트폰에 해당 게임을 다운로드할 수 있는 안드로이드마켓 페이지가 뜬다고 합니다.
4. 얼굴인식 잠금해제 기능 '페이스 언락(Face unlock)' 탑재
스마트폰에 얼굴을 갖다대면 자동으로 잠금이 해제되는 페이스 언락(Face unlock) 기능도 새롭게 탑재되었습니다. 이 기술은 최신의 얼굴 인식 기능을 이용한 것으로 미리 등록된 사용자의 얼굴을 인식해 잠금을 해제하는 것입니다.
5.더욱 진보된 사용자환경(UI)
아이스크림샌드위치는 가상 버튼만으로 모든 기능을 이용할 수 있다고 합니다.. 자주 쓰는 앱이나 음악, 메일, SNS 등을 위젯 탭에 모아두면 간편하게 이용할 수 있으며, 위젯의 크기도 변경할 수 있습니다. 손쉽게 멀티태스킹을 할 수 있도록 최근에 사용한 앱을 따로 불러올 수 있으며 알림 기능을 통해 문자나 이메일 등을 편리하게 체크할 수 있습니다. 또한 스와이프(Swipe:옆으로 쓸어내는 동작)를 통해 문자나 이메일 리스트를 삭제할 수도 있다고 합니다.
그외에도 '안드로이드 인터넷 브라우저의 속도가 빨라졌으며 즐겨찾는 인터넷 사이트를 저장해 두면 오프라인 상태에서도 열어볼 수 있으며 크롬 브라우저와 동기화할 수도 있다고 합니다.
[출처] 구글 안드로이드4.0 '아이스크림샌드위치'에서 달라진 5가지 |작성자 닥터아파트
설정
트랙백
댓글
글
인텐트를 이용하여 새로운 엑티비티를 띄우기 위해서는 일반적으로 다음과 같은 방법으로 새로운 엑티비티를 실행하게 됩니다.
Intent intent = new Intent(this, MyActivity.class);
startActivity(intent);
위의 코드는 다음과 같은 순서로 실행이 됩니다.
2. 이 인스턴스가 현재 태스크 스택의 최상단에 푸시가 됩니다.
3. 엑티비티가 시작되며(onStart) 포그라운드로 가져옵니다.
하지만 위와 같은 인텐트 생성에 관련된 기본적인 실행 방법을 인텐트 플래그를 사용하여 임의로 조정할 수 있습니다.
intent.addFlag(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
위와 같은 방법을 통해 특정한 플래그 옵션값을 startActivity(intent)가 수행될때 같이 넘겨줄 수 있습니다. 지금부터 이러한 플래그 옵션값들을 좀더 상세기 적어보도록 하겠습니다.
FLAG_ACTIVITY_BROUGHT_TO_FRONT
이 플래그는 사용자가 설정하는것이 아닌 시스템에 의해 설정되는 값입니다. 엑티비티의 실행모드가 singleTask이고 이미 엑티비티스택에 존재하고 있는 상태라고 가정을 할 때 다시 그 엑티비티가 호출되고 재활용 되었을 경우 자동으로 설정이 됩니다.
FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET

위의 그림에서 볼 수 있듯이 백그라운드와 포그라운드 전환관계에서CLEAR_WHEN_TASK_RESET 플래그가 설정된 엑티비티와 이후의 엑티비티 모두가 삭제되는것을 알 수 있습니다. 백그라운드로 넘어갔을때 유지를 안해도 될 일회성 엑티비티들은 해당 플래그를 사용하면 도움이 될것이라 봅니다.
FLAG_ACTIVITY_RESET_TASK_IF_NEEDED
이 플래그는 인텐트를 이용하여 새로운 태스크를 생성하거나 존재하고 있는 태스크를 포그라운드로 가져오는 경우가 아닌경우에는 사용하여도 아무런 효과가 없습니다. 적절한 경우라면 태스크를 리셋 합니다. 이때에 태스크의 affinity 설정에 맞추어 리셋이 일어나게 되며FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET과 같은 플래그 설정에 맞추어진 특정 처리가 일어나게 됩니다.
FLAG_ACTIVITY_CLEAR_TOP

예를 들면 현재 ABCDE순서로 엑티비티가 스택에 들어있다고 할때 엑티비티E에서 C를 호출하게 되면 D와 E는 스택에서 삭제되고 ABC만이 남아있게 됩니다. 여기서 AB 역시 남는다는 것을 이해하셔야 합니다.
FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS
엑티비티가 새로운 태스크안에서 실행될때에 일반적으로 타겟 엑티비티는 '최근 실행된 엑티비티' 목록에 표시가 됩니다. (이 목록은 홈버튼을 꾹 누르고 있으면 뜹니다) 이 플래그를 사용하여 실행된 엑티비티는 최근실행된엑티비티 목록에서 나타나지 않습니다.
FLAG_ACTIVITY_FORWARD_RESULT
기본적으로 엑티비티A가 엑티비티B를 호출하였다고 할 경우 startActivity(intent) 대신에startActivityForResult(intent) 메서드를 이용하여 호출을 함으로써 엑티비티B의 결과값을 엑티비티A로 전달할 수 있습니다.
엑티비티B에서는 setResult(int resultCode)를 정의한 뒤에 종료를 하게 되며 엑티비티B를 호출하였던 엑티비티A는 콜백메서드인 onActivityResult()를 통해 결과값을 전달받게 됩니다.

위에 나와있는 그림의 예를 통해 보면 엑티비티B가 엑티비티C를 호출하기위해 단순히startActivity()를 이용하는 것을 알 수 있습니다. 그리고 지금 설명중인 플래그를 붙이도록 합니다. 이후에 엑티비티C에서는 setResult()를 통해 결과값을 정의를 한후에 finish()를 통해 엑티비티를 종료하도록 합니다.
엑티비티B에서는 단순히 마찬가지로 finish()를 통해 엑티비티를 종료하시기만 하면 됩니다. 이후에 startActivityForResult()를 통해 엑티비티B를 호출했던 엑티비티A는onActivityResult() 콜백 메서드로 결과값을 받아보시면 엑티비티C에서 정의한 값을 받을 수 있다는것을 알 수 있습니다.
FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY
이 엑티비티 플래그는 시스템에 의하여 자동으로 설정되는 플래그입니다. 홈스크린화면에서 홈버튼을 롱클릭함으로써 뜨게 되는 "최근실행목록"을 통해 실행되었을 경우 자동으로 설정됩니다.
FLAG_ACTIVITY_MULTIPLE_TASK
이 엑티비티 플래그는 FLAG_ACTIVITY_NEW_TASK와 함께 사용하지 않으면 아무런 효과가 없는 플래그입니다. 두개의 플래그를 동시에 사용할 경우 새로운 태스크는 재활용되지 않고 무조건 새로 생성되며 피호출되는 엑티비티는 이 새로운 태스트의 최상위 엑티비티가 됩니다. (당연히 하나밖에 없을테니-_-a)
FLAG_ACTIVITY_NEW_TASK
이 엑티비티 플래그를 사용하여 엑티비티를 호출하게 되면 새로운 태스크를 생성하여 그 태스크안에 엑티비티를 추가하게 됩니다. 단, 기존에 존재하는 태스크들중에 생성하려는 엑티비티와 동일한 affinity를 가지고 있는 태스크가 있다면 그곳으로 새 엑티비티가 들어가게됩니다.
하나의 어플리케이션안에서는 모든 엑티비티가 기본 affinity를 가지고 같은 태스크안에서 동작하는것이 기본적(물론 변경이 가능합니다)이지만 FLAG_ACTIVITY_MULTIPLE_TASK 플래그와 함께 사용하지 않을경우 무조건적으로 태스크가 새로 생성되는것은 아님을 주의하셔야 합니다.
FLAG_ACTIVITY_NO_ANIMATION
안드로이드 OS가 2.0으로 올라오면서 새로 추가된 엑티비티 플래그입니다. 이 플래그를 사용할 경우 엑티비티가 스크린에 등장할시에 사용될 수 있는 다양한 애니메이션 효과를 사용하지 않습니다.
FLAG_ACTIVITY_NO_HISTORY
이 플래그를 사용할 경우 새로 생성되는 엑티비티는 어떤 태스크에도 보존되지 않게 됩니다. 예를 들면 로딩화면과 같이 다시 돌아오는것이 의미가 없는 화면이라면 이 플래그를 사용하여 태스크에 남기지 않고 자동적으로 화면이 넘어감과 동시에 제거할 수 있습니다.
FLAG_ACTIVITY_NO_USER_ACTION
이 플래그가 설정되면 자동적으로 엑티비티가 호출될 경우에 자동 호출되는onUserLeaveHint()가 실행되는것을 차단합니다. onUserLeaveHint() 콜백 메서드는 어플리케이션 사용중에 전화가 온다거나 하는등의 사용자의 액션없이 엑티비티가 실행/전환되는 경우에 호출되는 메서드입니다.
FLAG_ACTIVITY_REORDER_TO_FRONT

FLAG_ACTIVITY_SINGLE_TOP
이 플래그는 말그대로 하나의 탑(?)을 의미하는 설정입니다. 엑티비티를 호출할 경우 호출된 엑티비티가 현재 태스크의 최상단에 존재하고 있었다면 새로운 인스턴스를 생성하지 않습니다. 예를 들어 ABC가 엑티비티 스택에 존재하는 상태에서 C를 호출하였다면 여전히 ABC가 존재하게 됩니다.
http://blog.akquinet.de/2010/04/15/android-activites-and-tasks-series-intent-flags/
http://developer.android.com/reference/android/content/Intent.html

이 저작물은 크리에이티브 커먼즈 저작자표시-비영리-동일조건변경허락 2.0 대한민국 라이선스에 따라 이용할 수 있습니다.
RECENT COMMENT