第一部分
android canvas绘制简单图形
程序运行截图
代码功能
实现对矩形 圆形 扇形 直线的绘制。
代码实现
MainActivity.java
package com.example.simplecanvas;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
MyView.java
package com.example.simplecanvas;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.RectF;
import android.util.AttributeSet;
import android.view.View;
public class MyView extends View {
public MyView(Context context, AttributeSet attrs) {
super(context, attrs);
}
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
canvas.drawColor(Color.BLACK);
Paint paint = new Paint();
paint.setColor(Color.RED);
canvas.drawRect(10, 10, 110, 110, paint);
canvas.drawText("This is TEXT", 10, 130, paint);
RectF rf1 = new RectF(10, 130, 110, 230);
canvas.drawArc(rf1, 0, 45, true, paint);
canvas.drawLine(150, 10, 250, 110,paint);
RectF rf2=new RectF(150,130,250,230);
canvas.drawOval(rf2, paint);
}
}
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"
>
<com.example.simplecanvas.MyView
android:id="@+id/myView"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
/>
</LinearLayout>
需要注意
第一点
drawRect函数的前面2个参数是左上角的坐标。
drawText函数是字符串左下角的坐标。
第二点
在main.xml中使用自定义的View类时需要使用全称类名,在本例中就是com.example.simplecanvas.MyView
不能够直接声明为MyView
这样虽然编译时不会出错,但是运行时会出错。
第三点
drawArc方法
第二个和第三个参数分别是起始角度和扫过的角度。方向是顺时针。
第四个参数规定是否在绘制圆弧时是否使用圆形。
如下图是将上例的drawArc的第四个参数改为false时的运行截图
因为规定绘制时不包括圆形,因此绘制出的实际上是原来扇形的一段圆弧,而非扇形。
第二部分
android canvas绘制图片
和绘制简单图形类似。
需要做的变动如下
为了绘制图片,首先需要获得一个位图对象.。
Bitmap myBitmap;
myBitmap=BitmapFactory.decodeResources(),R.drawable.img);
然后就可以在画布上绘出图片了
paint.setAntAlias(true);
canvas.drawBitmap(myBitmap,10,10,paint);
注:本文所用代码来自<<android 2.0游戏开发实战宝典>>一书第二章第二小节