
1. 안드로이드 http 다운로드하기( HttpURLConnection + SSL ) 2. 안드로이드 HttpUrlConnection 서버로 전송 #1 (기본편, x-www-form-urlencoded ) 3. 안드로이드 HttpUrlConnection 서버로 전송 #2 ( multipart/form-data ) 서버에 데이터를 전송하려면 기본적으로 "application/x-www-form-urlencoded" 방식을 쓴다. x-www-form-urlencoded의 구조는 다음과 같이 생겼다. 이름2=값1&이름2=값2&이름3=값3&이름4=값4 이름과 값이 한쌍을 이루며, 쌍을 분리하는 것은 '&', 이름과 값을 분리하는 것은 '='로 구분되어지게 된다. 여기서 이름과 값 모두 UrlEncoded라는 형..
1. 안드로이드 http 다운로드하기( HttpURLConnection + SSL ) 2. 안드로이드 HttpUrlConnection 서버로 전송 #1 (기본편, x-www-form-urlencoded ) 3. 안드로이드 HttpUrlConnection 서버로 전송 #2 ( multipart/form-data ) 목차 1. 서론 2. 준비사항 3. 파일로 다운로드 4. Self-Signed 인증서 5. String으로 받기 서론 안드로이드에서 web의 파일 등을 다운로드하려면 DownloadManager를 쓰면 쉽게 되지만 문제는 알림이 뜨게 된다. 여러 개를 다운로드하면 정신이 없을 정도다. 그냥 프로그램상에서 받았으면 할 경우가 있는 데, 이 때 사용할 것이 바로 HttpURLConnection이다...
GLSurfaceView안드로이드는 OpenGLES을 사용할 수 있는 방법 중에 간단하면서도 쓸만한 GLSurfaceView를 지원해 주고 있다.속도가 빠른 장점이 있다. 정확히 TextureView를 이용한 것 보다는 빠른 것 같다. GLSurfaceView는 화면을 그리는 코드가 Render Thread로 분리되어 실행되기 때문에 MainThread에 주는 무리를 줄일 수 있고, 분리된 Thread로 인해 빠르게 화면을 그릴 수가 있다. 기본 사용법1. AndroidManifest.xml설정2. 초기화 및 Renderer지정3. onPause/onResume 1. AndroidManifest.xml 설정 일단 OpenGLES를 사용한다는 것을 알려야 하기 때문에 AndroidManifest.xml파일..
wait(), notify(), notifyAll() 스레드간에 서로 변수를 동시에 바꿔 발생하는 문제는 지난 글의 내용이고 이제 쓰레드간의 정보의 전달을 위해 사용하는 방법을 배워보자, 정확히 주로 정보의 전달에 사용하기 위한 방법으로 사용되는 방식일 뿐, 정보를 전달하는 것은 아니다. 쓰레드A에서 변수의 값을 변경했다면, 쓰레드B에서 변경되었다는 신호를 인지하여 변경한 값을 가져오는 방식에 대부분 사용되기 때문에 이런 설명을 달았다. 다른 용도로도 당연히 쓸 수 있으니... 세개의 함수가 있는 데, 이는 전부 Java의 Object객체에 달려있는 메소드이다. 따라서 객체로 되어있는(Object에서 상속받은) 모든 객체는 이 함수를 쓸 수 있다. 일단 이 함수가 어떻게 동작하는 지 설명할테니, 천천히 ..
이미 이 주제로 수많은 글들이 있지만,..... 나도 그냥 한번 정리를 해본다. 일단 동기화라는 말부터 설명을 해야 되는데(대체 누가 이름을 이[따구]로 지어서 헤깔게 하는지), [동기]의 반대말은 [비동기]라는 표현을 쓴다(이름이 이따구니..원..). 워낙 자주 사용되는 표현이라 적응이 되면 어렵지 않지만, 처음 접할 때는 서로 해깔리는 문제다. Synchronization의 뜻은 "조화"다. 따라서 비동기는 "조화롭지 못하다"라는 뜻이 되고, 쓰레드에 적용해 다시 정리하면, 비동기 : 쓰레드가 다른 쓰레드에 신경 쓰지않고 그냥 자기 할일만 한다.동기 : 쓰레드가 작업이 다른 쓰레드와 조화롭게 동작한다.(다른 쓰레드가 관여할 경우 자신의 실행을 잠시 멈춘다.) 라는 뜻이다. 멀티쓰레드로 프로그래밍을 할..
이전편에서 언급한 Bitmap를 재사용하려면 사용하지 않는 비트맵을 담아 둘 Pool이 필요하게 된다. 이번편에서는 이 풀(pool)을 만들어 보기로 하겠다. 원리는 간단하다. 사용하지 않는 Bitmap을 리스트에 넣어두고 이미지를 로드할 때, 크기가 맞는 녀석을 골라서 다시 내어주면 된다. 약간의 효율을 위해 리스트는 Bitmap의 ByteSize를 기준으로 정렬을 해두도록 한다. 멤버변수들 다음은 만들 클래스의 멤버변수들과 컨스트럭터이다. public class SimpleLruBitmapPool { private static final String TAG = "SimpleLruBitmapPool"; // Pool에 들어올수 있는 최대 크기 private int mMaxByteSize; // 현재 비..
여기서의 재사용은 recycle을 말하는 것이 아니고,이미 존재하는 Bitmap변수에 이미지를 가지고 오는 방법을 설명한다. BitmapFactory.decode* 함수들을 이용할 때, 이미 메모리상에 존재하는 Bitmap에 이미지를 로드할 수 있다. 이렇게 하면 다음과 같은 장점이 존재하게 된다. 장점 비트맵메모리를 필요한 만큼 할당이 되어 있다면, 할당/해제 과정이 사라지게되고, 이로인해 GC에 의해 순간순간 멈추는 현상이 줄어들게 된다. 이미 존재하는 Bitmap을 이용하기 때문에 OOM이 현저히 줄어들게 된다. 단점 사용되지 않는 비트맵을 recycle하지 않고, 계속할당되어있기 때문에, 필요없는 메모리 사용량이 존재하기 된다. 재사용할 비트맵을 유지관리하는 코드가 추가 되어야 한다. 지금부터 설..
Scroller는 View같은 것이 아니고 그냥 단순히 계산기이다. ScrollView나 Listview, RecyclerView 등에서 사용자가 손가락튕기기(플링?)을 한다던가 하면, 화면이 움직이는 데, 이 화면의 움직임이 시작시에는 빠르게 움직이다가 끝날 때 쯤은 천천히 멈추는 경우가 많다. 이런 것들을 Elastic Ease라고 하는데, 이 걸 산수로 현재의 보여질 위치를 계산해 내야한다. 수학을 잘하는 사람이야 쉽게 만들 수 있지만, 초보자 특히 수포자들에게 이 작업은 그리 쉽지는 않다. 안드로이드에서는 이 작업을 바로 할 수 있게 Class를 하나 제공해 주고 있다. Scroller라는 Class인데, 워낙 스크롤할 때 많이 써서 이런 이름이 붙은 듯하다. 스크롤 이외에도 사용처는 많으니 이 ..

이전편에서 설명한 Touch만으로는 단순한 작업만이 가능하다. 터치를 추적해서 이동을 한다거나, 클릭정도만 처리가 가능하기 때문에, 페이지를 넘긴다든지, 천천히 스크롤을 한다든지하는 사용자의 편의성을 위해 제공하는 제스처들을 바로 처리할 수 있게 만들어 두었다. 실제, 이 것을 일일이 만든다는 것은 쉬운일이 아니다. 특히 손가락을 튕기는 fling의 경우는 정말 만들기 어렵다. 터치점들을 일일이 추적하여 산수공식에 넣고, 기기마다 일일이 테스트를 거쳐야 하기 때문에, 수많은 시행착오를 거치다 못해 포기하는 경우가 다반사다. 구글은 이 작업을 쉽게 할 수 있게 미리 만들어 두었다. (땡큐 구글~) 이번 글에서는 click, fling, scroll, longpress등을 다루게 될 것이다. 기본적으로 지원..

안드로이드의 Touch를 다루기위해서는 다음의 내용을 이해하여야 별 어려움없이 만들 수가 있다. 그냥 이리저리 만들어 동작할 수있게 만드는 것은 그리 어렵지는 않지만, 앱을 만들다 보면 결국 제대로된 동작과 부드러운 움직임을 위해 아래목록의 내용을 다시 다 작업을 해야하는 경우가 다반사다. 따라서 관련된 내용을 이 곳에 모두 정리한다. 제목 내용 onTouch와 onTouchEvent 터치의 기본사항을 설명한다. GestureDetector 기본 제스쳐를 다룬다.( GestureDetector.SimpleOnGestureListener ) Scroller 이동속도에 따라 화면에 움직이는 위치를 계산한다. Velocity Tracker 손가락의 이동속도를 다룬다. GestureDectector와 Scale..

안드로이드에서 사용자가 Touch를 할 경우 그에 상응하는 동작을 필요에 따라 만들어 넣어야 한다. 이 Touch다루는 법을 전체적으로 다루려고 한다. 간단한 것은 어렵지 않게 만들 수 있지만, 때로는 상당히 복잡하여, 정확한 이해가 필요하기 때문에, 이렇게 차근차근 정리하기로 한다. 내용이 앞과 뒤가 서로 서로 엮여있는 방식이라 여러번 반복해서 읽어야 한다. 안드로이드의 View는 터치이벤트를 받을 수 있고, Activity도 터치이벤드를 받을 수 있다. View에 이 이벤트를 처리하려면 2가지의 방법이 있는데, 한가지는 View가 기본적으로 가지고 있는 onTouchEvent를 오버라이드하는 것, 다른 한가지는 setOnTouchListener()함수를 통하여 인터페이스가 적용된 객체를 지정하는 방법..

동작방식 색변경을 위해 안드로이드에서 제공하는 행렬(Matrix)는 5x4로 다음과 같이 생겼다. [ a b c d e f g h i j k l m n o p q r s t ] 이 행렬을 수식으로 나타내면 다음과 같이 된다. R' = a*R + b*G + c*B + d*A + e G' = f*R + g*G + h*B + i*A + j B' = k*R + l*G + m*B + n*A + o A' = p*R + q*G + r*B + s*A + t 행렬이 나왔다고 해서 겁먹을 필요는 없다. 이 수식을 천천히 살펴보자. 맨 오른쪽의 (e, j, o, t)값은 앞부분의 곱하기 연산과 관련 없이 그냥 더하고/빼는 값일 뿐이다. RGBA값을 강제로 끌어 올리거나 내리는 용도로 사용되는 값이다. R' 값은 원본의 R,..

안드로이드에서 이미지를 다룰 때, ImageView내에 어떻게 그려낼 지를 미리 정의해 둔 것이 있다. 실제 일일이 코딩으로 계산하며 만드는 시간을 줄여 주는 고마운 방식이다. 안드로이드 버전이 올라가면서 추가 될 수도 있겠지만, 총 8가지 방식이 있으며, 필요한 상황에 맞춰 바로 사용하면 된다. 하지만 정확한 동작방식을 일일이 테스트해보기는 시간이 걸리는 작업이니, 이 곳에 그 내용을 정리하도록 한다. 표로 정리를 해보았다. 표의 [XML]컬럼은 xml layout의 속성값이다. (android:scaleType="여기") 표의 [이미지 비율]컬럼은 가로/세로의 비율을 말한다. Java ScaleType.* 값 XML 크기변경 비율 설명 MATRIX 0 matrix 지맘대로 지맘 setImageMatr..
서론 플랫폼이나 Java 버전마다 다르겠지만 Java heap을 이용하는 것보다 Direct방식을 이용하는 것이 대부분의 상황에서 더빠르다.(보통 이 방식을 전송[네트웍이든 파일이든 메모리데이터 교환이든]을 위해 사용한다는 기준에서 빠르다는 뜻이다.) 필자는 이 방식을 Native(NDK)와 Java에서 메모리를 공유하는 데 주로 사용한다.(Native에서 빠르게 읽어내려고.,,) 생성법 생성하는 법은 두가지가 있다. 하나는 Java에서, 다른 하나는 Native에서 만드는 것이다. 같은 것 같지만 다른 점이 있다. Java에서 생성 생성하는 함수의 원형은 다음과 같다. static ByteBuffer allocateDirect( int capacity ); 필요한 용량을 바이트단위로 넘기면 ByteBu..
안드로이드에서 지원하는 이미지 포맷 안드로이드 기본 디코더에서 지원하는 이미지 포맷은 현재 BMP, GIF, JPG, PNG, WebP, HEIF이며 WebP는 Android 4.0이상부터 WebP중 일부만 지원하고 무손실,투명은 4.2.1이상에서 지원한다. HEIF는 8.0부터 지원한다. 실제 프로그래밍할 경우는 읽을 수 있는 포맷만을 읽어들이기 때문에, 지원사항은 그리 중요하지 않다. 단지 이미지의 로딩에 성공/실패만이 필요할 따름이다. 만약 낮은 버전의 기기에서 WebP나 HEIF를 지원하고 싶다면 NDK를 이용하여 Decoder를 컴파일해서 앱에 넣어야 한다. 비트맵 로드하기 안드로이드에서는 이미지 파일/메모리등에서 바로 Bitmap을 생성할 수 있다. Bitmap BitmapFactory.dec..

폰트파일은 아웃라인정보만을 가지고 있다. 이 아웃라인정보의 내부를 채운 것이 보통 글자이다. 폰트의 아웃라인 직선과 Bezier 커브로 그리는 정보가 들어있다. 이 정보를 가지고 화면에 글자를 찍는 방식이다. 이 직선과 Bezier 커브를 안드로이드 Path에서 그대로 지원하기 때문에 폰트의 Outline을 Path객체로 복사해 올 수가 있다. Path로 받을 수 있어 Path에서 지원하는 모든 함수를 사용하여 가공할 수 있다. 특히 Affine 2D Matrix를 이용할 수 있다는 장점이 있다. Path로 만들기 폰트의 글자들을 Path로 빼는 것은 아주 간단하다. String sSampleText = "SAMPLE TEXT"; Path path = new Path(); // 받을 Path Paint ..

안드로이드의 Paint는 기본적으로 외부폰트파일을 이용할 수가 있다. 앱에 폰트파일을 포함하여 이를 불러올 수 있게 이미 함수를 지원해준다. 이 함수는 Typeface class내에 있다. 함수의 원형은 다음과 같다. public static Typeface createFromAsset( AssetManager mgr, String path ); 함수 원형에서 보이듯, 외부서체를 이용하려면, Assset에 외부서체 파일을 넣어 두어야 한다. 지원하는 외부서체는 OTF와 TTF파일을 지원한다. 우선 Asset폴더에 사용할 서체를 넣고, 외부서체를 Typeface 인스턴스로 만든 후, Paint에 넣어주면 된다. Asset폴더에 서체파일 넣기 Asset폴더를 만들지 않았거나 없다면 다음과 같이 프로젝트화면에..

Antialiasing display는 격자로 만들어지기 때문에 아주 큰 글자로 출력할 때를 제외하고는 글자의 가장자리의 격자로인해 깨끗하게 보이지 않는다. aliasing의 뜻이 "찌글찌글"하다라는 뜻으로 말 그대로 이 찌글거림을 없애주는 기능이다. 글자의 가장자리부분에 Alpha(투명도)를 주어서 이 찌글거림을 완화 시켜 주는 것이다. 이는 서체뿐만 아니라 android.graphics.Path 등 모든 그리기 작업에 적용이 된다. 옛날 컴퓨터의 성능이 좋지 않은 시절과 해상도가 좋지 않았던 시절에는 이 기능은 상당한 부하가 되었지만, 지금은 좋은 성능덕분에 거의 켜놓고 시작을 한다. 코드는 다음과 같다. Paint paint = new Paint( Paint.ANTI_ALIAS_FLAG ); // ..

이 글을 읽기전에 우선 다음의 포스트를 읽고 오세요. https://jamssoft.tistory.com/141 안드로이드 FontMetrics 안드로이드 Canvas에 글자를 쓰려면 우선 서체가 어떻게 생겼는지를 알아야 한다. 다행히도 안드로이드는 이 부분을 Paint class를 통하여 바로 처리할 수 있게 되어 있다. 실제 이 것을 지원해 주지 않는다면 폰.. jamssoft.tistory.com 실제 글자를 Canvas를 통해서 출력하기 전에 출력될 텍스트의 크기를 알아 내야 할 필요가 있다. 안드로이드의 Paint는 이 것을 Paint 인스턴스의 getTextBounds로 정보를 얻을 수 있다. 다음은 폰트의 크기를 100px로 놓고 "jklmnOPq"라는 text를 getTextBounds한 ..
여러줄의 text를 출력하기 위해서는 고려해야 할 사항이 좀 많다. 줄이 출력하고자 하는 전체폭을 넘지 않는다면, 그냥 줄간격에 맞추어 출력을 하면되지만, 한 줄이 전체폭을 넘어간다면 단어에서 끊어주던지, 폭에 따른 글자에서 끊어 줘야 한다. 또한 한 단어가 한줄보다 클 경우는 단어내의 특정위치에서 또 끊어서 출력을 해야 한다. 이 고려할 사항도 사항이지만, 이 걸 일일이 계산해서 프로그래밍하는 것은 쉬운일은 아니다. 안드로이드에서는 이 과정을 한번에 해결해 주는 녀석이 있다. 땡큐 구글~ StaticLayout 다음은 StaticLayout을 이용하여 출력하는 코드이다. StaticLayout mTextLayout = new StaticLayout( text, paint, width, Layout.Al..
- Total
- Today
- Yesterday
- 컴퓨트셰이더
- 재태크
- 에어컨
- OpenGL ES
- 에어콘
- 금리
- 예금
- 티스토리
- TTS
- 컴퓨트쉐이더
- 경제보복
- 재테크
- 전기요금
- 안드로이드
- 공유 컨텍스트
- ComputeShader
- texture
- choreographer
- 아끼는 법
- Android
- gpgpu
- 텍스처
- 전기세
- 전기료
- 애드핏
- OpenGLes
- 애드센스
- 적금
- 사용료
- 블로그
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 | 29 |
30 | 31 |