안드로이드(Android) ImageView 에 이미지 회전(Image rotate) 시켜서 세팅하는 방법

 

 환경: Eclipse Mars, Android 4.2.2

 

안드로이드에서 Matrix 클래스로 이미지를 회전시켜 보겠습니다. 샘플은 리소스에 이미지를 불러와서 Bitmap 클래스로 비트맵을 생성하는 것입니다. 비트맵 생성할 때 Matrix 객체를 인수로 넘기면 됩니다.

 


 

ImageView 위젯에 이미지를 세팅하기 위해서는 불러온 리소스 이미지를 비트맵으로 변환해야 합니다. 비트맵으로 변환한 이미지는 setImageBitmap() 함수에 인수로 넘기면 됩니다. 이전에 이미지를 회전시켜야 겠죠. 새로 만든 rotateImage() 함수안에는 이미지 회전을 위해 Matrix 객체를 생성하는 부분이 있습니다. Matrix 객체를 생성할 때 각도를 셋팅하기 위해 postRotate() 함수를 이용합니다. 각도를 변경하기 위한 Matrix 객체가 생성되었다면 Bitmap 클래스의 createBitmap() 함수로 비트맵을 생성합니다.

mImaveView.setImageBitmap(rotateImage(
		BitmapFactory.decodeResource(getResources(),R.drawable.diablo), mDegree));

// 이미지 회전 함수
public Bitmap rotateImage(Bitmap src, float degree) {
	
	// Matrix 객체 생성
	Matrix matrix = new Matrix();
	// 회전 각도 셋팅
	matrix.postRotate(degree);
	// 이미지와 Matrix 를 셋팅해서 Bitmap 객체 생성
	return Bitmap.createBitmap(src, 0, 0, src.getWidth(),src.getHeight(), matrix, true);
}

 

▼ 아래 소스는 불러온 리소스 이미지를 회전시키는 rotateImage() 함수가 들어간 전체 소스입니다. 샘플에서는 버튼을 클릭할 때마다 90도씩 시계 방향으로 회전하도록 되어 있습니다.

import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Matrix;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ImageView;

import com.example.sampleandroidinfo.R;

public class ImageRotateActivity extends Activity {
	ImageView mImaveView;
	int mDegree = 0;
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_image_rotate);
		
		Button button = (Button) findViewById(R.id.btn_alert);
		button.setOnClickListener(new OnClickListener() {
			public void onClick(View v) {
				mDegree = mDegree + 90;
				mImaveView = (ImageView) findViewById(R.id.imgRotate);
				mImaveView.setImageBitmap(rotateImage(
						BitmapFactory.decodeResource(getResources(),
								R.drawable.diablo), mDegree));
			}
		});
	}
	
	// 이미지 회전 함수
	public Bitmap rotateImage(Bitmap src, float degree) {
		
		// Matrix 객체 생성
		Matrix matrix = new Matrix();
		// 회전 각도 셋팅
		matrix.postRotate(degree);
		// 이미지와 Matrix 를 셋팅해서 Bitmap 객체 생성
		return Bitmap.createBitmap(src, 0, 0, src.getWidth(),
				src.getHeight(), matrix, true);
	}
}

 

▼ 아래 XML 소스는 메인 Activity 화면을 구성할 레이아웃 XML 입니다. 회전시킬 이미지가 위치할 ImageView 위젯과 버튼이 들어가 있습니다.

 

activity_image_rotate.xml

 

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >
 
    <TextView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:background="#3F0099"
        android:gravity="center"
        android:paddingBottom="@dimen/abc_action_bar_icon_vertical_padding"
        android:paddingTop="@dimen/abc_action_bar_icon_vertical_padding"
        android:text="이미지 회전 시키는 방법"
        android:textColor="#FFFFFF" />
    
    <Button
        android:id="@+id/btn_alert"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="이미지 회전시키기" />
 
    <ImageView
        android:id="@+id/imgRotate"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:src="@drawable/diablo" />
    
</LinearLayout>
Posted by 녹두장군

댓글을 달아 주세요

  1. 안티안드로이드 2016.03.16 15:01  댓글주소  수정/삭제  댓글쓰기

    굳이 매트릭스객체를 이용해서 회전한 이유가 궁금해요 피드백부탁드립니다