안드로이드

 

     



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);
            }


        }




    }



}

 

 

 

 

 

 

 

 

about author

PHRASE

Level 60  머나먼나라

기록은 기억을 남긴다. -그라시안

댓글 ( 4)

댓글 남기기

작성