DIRECTION : case 1 DIRECTION : case 2
DIRECTION : case 3 DIRECTION : case 4
package com.example.choi.ex07_graphic;
import android.content.Context;
import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
public class ImageRotate extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(new MyView(this));
}
//내부 클래스
class MyView extends View {
public MyView(Context context) {
super(context);
}
//화면의 가로, 세로 사이즈 계산
@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
super.onSizeChanged(w, h, oldw, oldh);
Log.i("test", "width :" +getWidth() + " , height :" +getHeight());
}
/*
1. 가장 단순현 회전 형식
@Override
protected void onDraw(Canvas canvas) {
//화면 가운데 좌표
int centerX =getWidth()/2;
int centerY =getHeight()/2;
int w=0;
int h=0;
Resources res=getResources();
Bitmap rose=BitmapFactory.decodeResource(res, R.drawable.rose_1);
//단지 회전만 만들기 위해서는 w와 h 도 생략 해도 된다.
w=rose.getWidth()/2;
h=rose.getHeight();
for(int i=1; i<=18; i++){
//이미지 회전(회전각도, 기준x좌표, 기준 y좌표)
canvas.rotate(20, centerX, centerY);
canvas.drawBitmap(rose, centerX-w, centerY-h,null);
}
}*/
/*
2. 상단 이미지 추가 및 상단 점 추가 와 회전
@Override
protected void onDraw(Canvas canvas) {
//화면 가운데 좌표
int centerX =getWidth()/2;
int centerY =getHeight()/2;
int w=0;
int h=0;
Resources res=getResources(); //리소스 디렉토리
Bitmap rose =BitmapFactory.decodeResource(res, R.drawable.rose_1 );
//drawable 디렉토리의 리소스를 비트맵으로 변환
Paint paint =new Paint();
paint.setColor(Color.RED);
//색상채우기 + 테두리선
paint.setStyle(Paint.Style.FILL_AND_STROKE);
canvas.drawColor(Color.WHITE);
w=rose.getWidth()/2;
h=rose.getHeight();
getWindow().setTitle("이미지 회전");
//이미지 출력(이미지, x, y, 페이트 객체)
canvas.drawBitmap(rose, 10, 10, null);
//원그리기 (X-좌표, Y-좌표, 반지름, 페인트)
//canvas.drawCircle(w+10, h+10, 10, paint);
for(int i=1; i<=18; i++){
//이미지 회전(회전각도, 기준x좌표, 기준 y좌표)
canvas.rotate(20, centerX, centerY);
canvas.drawBitmap(rose, centerX-w, centerY-h,null);
}
}
*/
//3. 배열로 4가지 경우로 선택적 회전
@Override
protected void onDraw(Canvas canvas) {
//화면 가운데 좌표
int centerX =getWidth()/2;
int centerY =getHeight()/2;
int w=0;
int h=0;
int DIRECTION=4;
Bitmap[] rose =new Bitmap[4]; //비트맵 배열
Resources res=getResources(); //리소스 디렉토리
//drawable 디렉토리의 리소스를 비트맵으로 변환
rose[0]= BitmapFactory.decodeResource(res, R.drawable.rose_1);
rose[1]=BitmapFactory.decodeResource(res, R.drawable.rose_2);
rose[2]=BitmapFactory.decodeResource(res, R.drawable.rose_3);
rose[3]=BitmapFactory.decodeResource(res, R.drawable.rose_4);
Paint paint =new Paint();
paint.setColor(Color.RED);
//색상채우기 + 테두리선
paint.setStyle(Paint.Style.FILL_AND_STROKE);
canvas.drawColor(Color.WHITE);
switch (DIRECTION){
case 1:
w=rose[0].getWidth()/2;
h=rose[0].getHeight();
break;
case 2:
w =0;
h=rose[1].getHeight();
break;
case 3: w=rose[2].getWidth();
h=0;
break;
case 4:
w=rose[3].getWidth();
h=rose[3].getHeight()/2;
break;
}
getWindow().setTitle("이미지 회전");
//이미지 출력(이미지, x, y, 페이트 객체)
canvas.drawBitmap(rose[DIRECTION-1], 10, 10, null);
//원그리기
canvas.drawCircle(w+10, h+10, 10, paint);
for(int i=1; i<=18; i++){
//이미지 회전(회전각도, 기준x좌표, 기준 y좌표)
canvas.rotate(20, centerX, centerY);
canvas.drawBitmap(rose[DIRECTION-1], centerX-w, centerY-h,null);
}
}
}
}
댓글 ( 4)
댓글 남기기