Android Image Drawing using Canvas
사용된 이미지:
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(레이아웃파일)
<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);
}
}