본문 바로가기

Android/Image Drawing

Android Image Drawing using Canvas

사용된 이미지:

사용자 삽입 이미지
 R.java 파일에 R.drawable.save으로 등록된 것으로 가정함)


package com.dearpeople.android.test.comp;

import android.app.*;
import android.content.*;
import android.graphics.*;
import android.os.*;
import android.view.*;

public class CustomUITest extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //setContentView(R.layout.main);
        MyView myView = new MyView(this);
        setContentView(myView);
    }
}

class MyView extends View{

  public MyView(Context context) {
   super(context);
   // TODO Auto-generated constructor stub
  }

  @Override
  protected void onDraw(Canvas canvas) {
   // TODO Auto-generated method stub
   Bitmap myBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.save);
   canvas.drawBitmap(myBitmap, 0, 0, null);
  }
}



위와같이 Activity안에서 뷰를 생성하고 setContentView()를 이용하여 화면에 출력하는 방법이 아닌,
커스텀뷰를 레이아웃 xml 파일에 설정하고 사용하는 예는 다음과 같다.

MyView.java

package com.dearpeople.android.test.comp;
import com.dearpeople.android.test.comp.R;

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.util.AttributeSet;
import android.view.View;

public class MyView extends View{

  public MyView(Context context) {
   super(context);
  }
 
  /* xml 레이아웃파일에서 이 뷰를 사용하려면 이 생성자가 반드시 필요함*/
  public MyView(Context context, AttributeSet attrs) {
   super(context, attrs);
  }
 
  @Override
  protected void onDraw(Canvas canvas) {
   // TODO Auto-generated method stub
   Bitmap myBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.save);
   canvas.drawBitmap(myBitmap, 0, 0, null);
   this.invalidate();
  }

 @Override
 protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
  // TODO Auto-generated method stub
  super.onMeasure(widthMeasureSpec, heightMeasureSpec);
  setMeasuredDimension(50, 50);
 }
 
}




main.xml(레이아웃파일)

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
<TextView 
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="@string/hello"
    />
 <LinearLayout
 android:layout_width="fill_parent"
 android:layout_height="fill_parent"
 android:orientation="vertical"
 android:layout_gravity="center_horizontal"
 android:gravity="center">
 
    <com.dearpeople.android.test.comp.MyView
    android:id="@+id/myview"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:gravity="center"/>

    
 </LinearLayout>
</LinearLayout>




CustomUITest.java

package com.dearpeople.android.test.comp;

import android.app.*;
import android.content.*;
import android.graphics.*;
import android.os.*;
import android.view.*;

public class CustomUITest extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        //MyView myView = new MyView(this);
        //setContentView(myView);

    }
}