paint类是画笔类,用于描述图形的颜色和风格,比如颜色、大小等;canvas是画布类,用于绘制各种图形,比如文本Text、几何图形等。Paint类是辅助类,一半作为Canvas类的参数。
通过一个例子演示Canvas绘图用法:
- 创建一个新项目
- 新建一个View的子类,再改类中重写onDraw(Canvas canvas)方法,该方法是在刷新视图时自动回调的方法,在onDraw()方法中使用canvas对象绘制图形,在其中会用到Paint类。
- 然后再Activity中添加该视图,即是在setContentView(”View子类的对象”)。
在Canvas中有使用到Paint类,会创建Paint类的对象,直接new出来就行。
在创建的View子类中,重写了onDrown()和 onTouchEvent(MotionEvent event)方法,一个用于绘制图形,一个用于响应事件
public class CanvasView extends View {
private Paint mPaint;//画笔类
private float x,y;
public CanvasView(Context context) {
super(context);
mPaint=new Paint();
mPaint.setColor(Color.BLUE);
mPaint.setTextSize(50);
x=10;
y=10;//初始化图形的坐标位置,以便于之后根据事务动态变化
}
//重写onDraw(),在onDraw中绘制图形
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
canvas.drawCircle(x,y,10,mPaint);//圆形的x、y坐标、半径、画笔类
canvas.drawText("Android",100,100,mPaint);//文本图形,内容、xy坐标、画笔类
}
//MotionEvent.ACTION_MOVE响应鼠标按住拖动和MotionEvent.ACTION_UP点击屏幕某处时
@Override
public boolean onTouchEvent(MotionEvent event) {
if (event.getAction()==MotionEvent.ACTION_MOVE ||
event.getAction()==MotionEvent.ACTION_UP){
x=event.getX();
y=event.getY();//得到触发事件的坐标,让图形更新坐标
}
invalidate();//刷新视图,重新回调onDraw()方法
return true;
}
}
在MainActivity中更改setContentView()
setContentView(new CanvasView(this));
可以使用random函数,在每次事件后,随机的改变图形颜色。需要注意的是在将随机数转换为int时,是对后面的整体进行转换,不要写成(int)Math.random()*255这样,因为Math.random()产生的是[0,1)的double数转换为int时都为0.
colorred=(int)(Math.random()*255);