Android 에서 제공하는 2가지 형태의 메뉴 중에서 Option Menu의 예
메뉴를 선택할 때마다 이미지의 축소 및 확대, 이미지의 회전이 수행된다
main.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <ImageView android:id="@+id/imageView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:scaleType="matrix" android:src="@drawable/mountain" /> </LinearLayout>
OptionMenuDemo.java
package com.example.androidtest; import android.app.*; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Matrix; import android.os.Bundle; import android.view.Menu; import android.view.MenuItem; import android.widget.*; public class OptionMenuDemo extends Activity { ImageView imageView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.seekbar_main); imageView = (ImageView) findViewById(R.id.imageView1); } static final int ID_HALF = Menu.FIRST+1; static final int ID_ORIGIN = Menu.FIRST+2; static final int ID_CW45 = Menu.FIRST+3; static final int ID_CW90 = Menu.FIRST+4; static final int ID_CW180 = Menu.FIRST+5; static final int ID_CCW45 = Menu.FIRST+6; static final int ID_CCW90 = Menu.FIRST+7; static final int ID_CCW180 = Menu.FIRST+8; static final int ID_NO_ROT = Menu.FIRST+9;
@Override public boolean onCreateOptionsMenu(Menu menu) { menu.add(Menu.NONE, ID_HALF, Menu.NONE, "50%"); menu.add(Menu.NONE, ID_ORIGIN, Menu.NONE, "100%"); menu.add(Menu.NONE, ID_CW45, Menu.NONE, "CW 45"); menu.add(Menu.NONE, ID_CW90, Menu.NONE, "CW 90"); menu.add(Menu.NONE, ID_CW180, Menu.NONE, "CW 180"); menu.add(Menu.NONE, ID_CCW45, Menu.NONE, "CCW 45"); menu.add(Menu.NONE, ID_CCW90, Menu.NONE, "CCW 90"); menu.add(Menu.NONE, ID_CCW180, Menu.NONE, "CCW 180"); menu.add(Menu.NONE, ID_NO_ROT, Menu.NONE, "NO Rotation"); return super.onCreateOptionsMenu(menu); } @Override public boolean onOptionsItemSelected(MenuItem item) { switch(item.getItemId()) { case ID_HALF : changeScale(0.5f); break; case ID_ORIGIN: changeScale(1f); break; case ID_CW45: rotateImage(45); break; case ID_CW90: rotateImage(90); break; case ID_CW180: rotateImage(180); break; case ID_CCW45: rotateImage(-45); break; case ID_CCW90: rotateImage(-90); break; case ID_CCW180: rotateImage(-180); break; case ID_NO_ROT: rotateImage(0); break; } return super.onOptionsItemSelected(item); } public void changeScale(float scale) { Matrix matrix = new Matrix(); matrix.postScale(scale, scale); imageView.setImageMatrix(matrix); } public void rotateImage(float deg) { Bitmap myImg = BitmapFactory.decodeResource(getResources(), R.drawable.mountain); Matrix matrix = new Matrix(); matrix.postRotate(deg); Bitmap rotated = Bitmap.createBitmap(myImg, 0, 0, myImg.getWidth(), myImg.getHeight(),matrix, true); imageView.setImageBitmap(rotated); } }