뷰와 캔버스 캔버스 사용시 onDraw()사용하며, 강제 그리기 호출시 invalidate 메소드를 사용
캔버스 메소드
drawColor(color) 화면에 색상 출력
drawPoint(x, y, paint) 화면에 점 출력
drawLine(x1, y1, x2, y2, paint) 화면에 선 출력
drawCircle(x, y, radius,paint) 반지름 크기의 원 출력
drawRect(x1, y1, x2, y2) 사각형 출력
drawRoundRect(RectF, rx, ry, paint) RectF 사각형에 rx, ry만큼 모서리가 둥근 사각형 생성
drawOval(RectF, r, paint) 사각형에 내접한 원 출력
drawArc(RecF, starAngle, sweepAngle, useCenter, Paint) 부채꼴 모양 원 생성, useCenter가 false일 경우 호
drawText(text, x, y, paint) 해당 좌표에 글자 출력
Paint 메소드
setARGB(int a, int r, int g, int b) Paint의 알파 투명도와 색상 설정
setAlpha(int a) 투명도 설정
setAntiAliase(boolean aa) 경계면의 부드러움 설정
setColor(int color) 색상 지정
setStorkeWidth(float width) 선의 굵기 지정
setStyle(Paint.Style style) FILL(색상 채움) FILL_AND_STROKE(색상과 선), STROKE(선)
setTextAlign(Paint.Align align) 글자를 정렬
drawText(text, x, y, paint) 해당 좌표 글자 출력
onDraw 이벤트는 뷰 클래스에서 처음 생성시 requestLayout 메소드를 자동으로 호출하여 그림을 그린다.
이미지, 텍스트 다루기
비트맵은 BitmapFactory.decodeResource()에서 getResource와 프로젝트 내의 R.drawable.icon에서 읽을 수 있다. res안에 고유 id가 부여되는데 id는 gen폴더의 패키지명안의 R에 등록되어 있으며, 경로 값은 static final int형의 고유 값을 가진다.
이러한 값은 자동 생성되며, 별도 변경처리를 하지 않지만 값을 읽어오는 절차가 필요한다. BitmapFactory.decodeResource는 자원으로 부터 int형 고유 값을 가져와 비트맵 이미지로 처리한다.
Bitmap bitmap = bitmapFactory.decodeResource(getResources(), R.drawable.icon);
createScaleBitmap()크기 자유롭게 변경
preScaled(-1,1) x축 역방향, y축 정향방으로 이미지 변경
bitmap.recycle(); 자원 반환
텍스트 출력
convas.drawText("TEXT", x, y, paint);
paint.setTextSize(int); //글자의 크기 설정
paint.measureText("문자열"); //글자의 크기 리턴
paint.ascent(중심선 위의 크기) //문자열의 높이 구함
paint.descent(중심선 아래의 크기)
스레드 제어
서피스 뷰는 뷰를 상속받은 클래스로 직접 화면에 출력하려면 별도의 스레드를 사용해야 한다.
서피스 뷰 다루기
서피스 뷰 상속시 디폴트 구현 메소드
public void onDraw(Canvas canvas) 화면을 그린다.
public void surfaceChanged 뷰 변경시 호출
public void surfaceCreated 뷰 생성시 호출
public void surfaceDestroyed 뷰 종료시 호출
서피스 뷰 생성시 스레드를 실행하며, 뷰 종료시 스레드의 join()메소드를 이용해 종료한다.
터치 이벤트
ACTION_MOVE 터치된 포인트 이동시
ACTION_DOWN 터치 다운 시
ACTION_UP 터치 업 시
ACTION_CANCEL 터치가 영역 밖으로 이동하여 취소된 경우
ACTION_POINTER_DOWN 두 개 이상의 터치가 다운
ACTION_POINTER_UP 두 개 이상의 터치가 업
멀티터치 이벤트
이벤트 추가 발생시 ID가 증가한다.
첫 번째 터치 ACTION_DOWN 이벤트, 포인트 ID:0
두 번째 터치 ACTION_POINTER_DOWN 이벤트, 포인트 ID:1
세 번째 터치 ACTION_POINTER_DOWN 이벤트, 포인트 ID:2
두 번째 터치 제거 ACTION_POINTER_UP 이벤트, 포인트 ID : 1 제거
네 번째 터치 등록 ACTION_POINTER_DOWN 이벤트, 포인트 ID : 1
포인터 인덱스 값 구하기
final int
pointerIndex = (action & MotionEvent.ACTION_POINTER_INDEX_MASK) >>
MotionEvent.ACTION_POINTER_INDEX_SHIFT;
final int pointerID = event.getPointerID(pointerIndex);
final int pointerID = event.getPointerID(pointerIndex);
게임 화면 설정
int
screenWidth = getWindowManager().getDefaultDisplay().getWidth();
int screenHeight = getWindowManager().getDefaultDisplay().getHeight();
int screenHeight = getWindowManager().getDefaultDisplay().getHeight();
파일입출력
사운드 출력
SoundPool(int maxStream, int streamType, int secQuality)
streamtype : AudioManager.STREAM_MUSIC를 입력
play(int soundId, float leftVolume, float rightVolume, int priority, int loop, float rate)
soundiSound Pool의 객체를 나타냄
left/right Volume 왼쪽/오른쪽불륨을 나타냄
priority 우선순위 설정
loop 반복횟수 0은 1회 1부터는 추가횟수
rate 속도, 1보다 작으면 느리게 크면 빠르게
cf) assets 자원을 사용하려면 AssetManager를 임포트 해야하며, 사운드를 구현하기 위해서는 AudioManager와 SoundPool을 임포트 해야한다.
0 개의 댓글:
댓글 쓰기