본문 바로가기

Study/Programming

안드로이드 그래픽 이미지 활용하기

Hi


안녕하세요 꼬로미입니당당


안드로이드 메뉴의 종류와 특징들에 대해서 포스팅합니다



그래픽

onDraw() : 화면을 다시 그릴 필요가 있을 때 자동적으로 호출

 

Canvas 클래스

그림을 그리는(화포)에 해당, onDraw()의 매개변수로 Canvas를 사용

drawRect(), drawText() 등 그리기 메소드를 가지고 있음

애플리케이션 다시 그릴 때 invalidate()을 호출

 

Paint 클래스

색상, 선 스타일, 채우기 스타일, 폰트, 앤티앨리어싱 여부 등과 같은 그리기 속성을 가지는 클래스

Canvas의 메소드는 Paint 객체를 마지막 매개변수로 하여 호출 해야함

 


기본 도형

설명

메소드

drawPoint(float x, float y, Paint paint)

직선

dawrLine(float x, float y, float stopx, float stopy, Paint paint)

사각형

drawRect(float, float, float, float, paint)

drawRect(RectF rect, Paint paint)

drawRect(Rect r, Paint paint)

drawCircle(float cx, float cy,float radius, paint paint)

텍스트

drawText(String text, float x, float y, Paint paint)

 





그리기 속성

색상설정

paint.setColor(0xFF0000);

paint.setColor(Color.RED);

 


앤티 에일리어싱(AntiAliasing)

도형의 경계부분을 더 매끄럽게 그려지도록 하는 기술, 출력속도가 느려질 수 있음

setAntiAlias(true) : 앤티 에일리어싱 사용

 


폰트 변경

폰트는 Typeface클래스의 객체,

Typeface.creat() : 폰트 생성

setTypeface() : 폰트변경, Paint 클래스 안에 있음

 


텍스트 정렬

void setTextAlign(Paint.Align align) :

 




패스 그리기

패스는 복잡한 기하학적인 경로를 표현

직선, 타원, 곡선으로 이루어 질 수 있음, 스타일에 따라 채워서 그릴수도 있고 외곽선만 그릴 수도 있음

캔버스의 drawPath() 메소드를 이용 // void drawPath(path path, Paint paint)

 




이미지 표시하기

간단한 방법으로 리소스 폴더에 이미지파일을 넣어 참조하는 것

지원되는 파일 형식 : PNG, JPG, GIF

리소스 추가시 소스코드나 XML에서 식별자를 통해 참조가 가능

ex) aaa.png 파일은 R.drawable.aaa로 참조

 


이미지 뷰를 사용해 이미지 표시

레이아웃 파일에서 ImageView를 추가하고 이미지 소스를 설정

 


이미지를 직접 그리는 방법

많이 사용되는 방법으로 BitmapFactory 클래스의 decodeResource() 사용

첫 번쨰 인수 리소스 객체에서 두 번쨰 인수 식별자에 해당하는 이미지 리소스를 찾아 디코딩하여 비트맵으로 반환

비트맵을 얻은 뒤 drawBitmap(Bitmap bitmap, float left, float top, Paint paint)으로 그려줌

Bitmap b = BitmapFactory.decodeResource(getResource(), R.drawable.android);

getResource() : 이미지 데이터를 포함하는 애플리케이션 리소스 객체

R.drawable.android : 이미지 리소스 식별자

 


비트맵 변환하기(이미지 크기 변환)

비트맵 생성에 createBitmap() creatScaledBitmap()을 사용

변환행렬 Matrix()와 도형의 크기를 변경시키는 preScale()

Matrix m = new Matrix(); 

Matrix m = new Matrix(); : 변환 행렬을 생성

m.preScale(1,-1); X값에 1을 곱하고 y값에 -1을 곱하는 변환행렬을 만듬

boolean preScale (float sx, float sy) : 도형의크기를 xy축 방향으로 sx, sy 만큼 변경

 

 

createScaledBitmap()

비트맵을 생성해서 크기를 늘였다 줄였다 할 수 있음

 


createBitmap()

Bitmap mb = Bitmap.createBitmap(b, 0, 0, b.getWidth(), b.getHeight(), m, false);

연산이 적용된 비트맵을 한번 더 만들어 주며

이미지의 일부만 잘라서 복사 해 올 수 있고 createScaledBimap()에서 하지 못하는 기능들을 Matrix를 사용함으로 다양한 효과를 줄 수 있습니다




 

도형객체이용

BitmapDrawable, ShapeDrawable, PictureDrawable, LayerDrawable 들을 사용해

이를 상속받아 개발자가 객체를 정의하는 것이 가능

XML과 소스코드로 객체 생성이 가능

 


소스코드에서 도형 정의

원하는 도형 객체를 인수로 해 ShapeDrawable 객체 생성

생성 후 도형 높이, 너비 설정

테두리와 선의 색상같은 속성은 Paint 객체를 얻은 후에 사

 


도형의 경로 지정

Path 객체 생성후 moveTo()lineTo()를 이용해 경로 지정

 


사용자 지정 뷰에서 도형 객체 사용

setBackgroundDrawable()를 호출해 도형객체를 뷰의 배경으로 사용가능

onDraw()에서 도형객체를 화면에 직접 그릴 수도 있음

 




애니메이션


프로퍼티 애니메이션

객체의 속성을 애니메이션할 수 있게 함, 선호되는 애니메이션방식화면에 그려지는 객체이든 아니든 어떤 객체라도 가능, 확장가능하게 설계, 커스텀타입 속성도 애니메이션이 가능


뷰 애니메이션 : 뷰 객체에 대해서만 적용이 가능, 예전부터 지원되던 방식, 사용이 쉬움


드로워블 애니메이션 : 필름처럼 드로워블 리소스를 하나씩 표시하는 방식, 사물을 애니메이션하는데 유용

 




서피스 뷰(SurfaceView)

그리기 전용의 화면을 제공하는 뷰

사용자 인터페이스와 별도 애플리케이션에게 그림을 그릴 수 있는 화면을 제공

 

서피스뷰 사용방법

SurfaceView 상속받은 클래스 정의

액티비티 화면으로 서피스뷰를 설정 후 새로운 스레드에서 이 서피스 뷰에 그림을 그림

SurfaceHolder.Callback으로 서비스의 생성과 소멸 시점을 그림담당 스레드에게 알림

surfaceCreated(SurfaceHolder holder) : 서피스 뷰 화면이 생성되면 호출, 메소드 내 그림 그리는 스레드 생성

surfaceDestroyed(SurfaceHolder holder) : 서피스 뷰 화면이 파괴되기 직전에 호출, 그림 그리는 메소드 종료

surfaceChanged(SurfaceHolder , int, int wid, int hei) : 화면의 구조적인 변경이 있는 경우 호출(포맷, 크기)

addCallback() : SurfaceHolder의 콜백 메소드를 받을 때 호출

unlockCanvasAndPost() :

캔버스에 그리는 것을 완료하면 호출, 사용자가 그려놓은 상태그대로 서피스 뷰를 실제 장치의 화면으로 복사

 




Bye

읽어주셔서 감사드립니다

도움이 되셨다면 덧글을 부탁드립니다헤헤