DrawView 一个绘制各种图形的方法。
public class DrawView extends View{
public DrawView(Context context) {
super(context);
}
public DrawView(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
canvas.drawColor(Color.BLACK);
Paint paint = new Paint();
paint.setColor(Color.RED);
canvas.drawText("画圆",10,20,paint);
canvas.drawCircle(60,20,10,paint); //小圆
paint.setAntiAlias(true); //设置抗锯齿,去除笔的毛茬
canvas.drawCircle(120,20,20,paint); //大圆
canvas.drawText("画线和弧线",10,60,paint);
paint.setColor(Color.GREEN);
canvas.drawLine(60,40,100,40,paint); //画直线,和宽度平行
canvas.drawLine(110,40,190,80,paint); //画斜线
//绘制弧线
//canvans.drawArc
//drawArc(RectF oval, float startAngle, float sweepAngle, boolean useCenter, Paint paint)
//设置是空心的
paint.setStyle(Paint.Style.STROKE);
//设置圆弧的外切矩形
RectF oval = new RectF(150,20,180,40);
canvas.drawArc(oval,180,180,false,paint);
//重新设置矩形的位置
oval.set(190,20,220,40);
canvas.drawArc(oval,180,180,false,paint);
oval.set(170,30,200,60);
canvas.drawArc(oval,0,180,false,paint);
canvas.drawText("画矩形",10,80,paint);
paint.setColor(Color.GRAY);
paint.setStyle(Paint.Style.FILL); //设置实心
canvas.drawRect(80,80,100,100,paint); //左上右下 ,绘制正方形
canvas.drawRect(110,80,180,90,paint); //矩形
canvas.drawText("画扇形和椭圆形",10,120,paint);
Shader shader = new LinearGradient(0,0,100,100,new int[]{Color.RED,Color.GREEN,Color.YELLOW,Color.BLUE,Color.GRAY}
,null, Shader.TileMode.REPEAT);
paint.setShader(shader); //设置渲染的颜色
RectF rectF = new RectF(120,100,260,240);
//画扇形
canvas.drawArc(rectF,200,150,true,paint);
//画椭圆
rectF.set(280,100,320,130);
canvas.drawOval(rectF,paint);
canvas.drawText("画三角形",10,200,paint);
Path path = new Path();
path.moveTo(80,200); //定义多边形的起点
path.lineTo(120,250);
path.lineTo(80,250);
path.close(); //使每个点变成封闭的几何图形
canvas.drawPath(path,paint);
canvas.drawText("画圆角矩形",10,280,paint);
RectF rectF1 = new RectF(80,290,220,330);
canvas.drawRoundRect(rectF1,20,20,paint);
//画贝塞尔曲线
canvas.drawText("画贝塞尔曲线",10,350,paint);
paint.reset(); //重置画笔
paint.setColor(Color.GRAY);
paint.setStrokeWidth(8);
paint.setStyle(Paint.Style.STROKE);
Path path2 = new Path();
path2.moveTo(100,350);
path2.quadTo(150,340,170,430); //设置贝塞尔曲线的控制点坐标和终点坐标
canvas.drawPath(path2,paint);
//绘制图片,花上去一张图片
Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.d_doge);
canvas.drawBitmap(bitmap,250,350,paint);
}
}
ClipView剪切某一块区域的一个方法
public class ClipView extends View{
private Paint mPaint;
public ClipView(Context context) {
super(context);
}
public ClipView(Context context, AttributeSet attrs) {
super(context, attrs);
mPaint = new Paint();
mPaint.setColor(Color.GREEN);
mPaint.setAntiAlias(true);
mPaint.setStrokeWidth(6);
mPaint.setTextSize(16);
mPaint.setTextAlign(Paint.Align.RIGHT);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
canvas.drawColor(Color.GRAY);
//保存画布上的原始状态
canvas.save();
canvas.translate(10,10); //移动画布
drawScence(canvas);
canvas.restore();
canvas.save();
canvas.translate(160,10);
canvas.clipRect(10,10,90,90);
canvas.clipRect(30,30,70,70, Region.Op.REPLACE);
//DIFFERENCE:第一次剪切和第二次剪切不同的地方显示出来。
//INTERSECT:显示两次剪切的交集
//REPLACE :只显示第二次的结果
//REVERSE_DIFFERENCE:只显示第二次不同于第一次的部分
//UNION :全部都显示出来。
//XOR : 补集显示,全部的部分减去相交的部分
drawScence(canvas);
canvas.restore();
}
public void drawScence(Canvas canvas){
canvas.clipRect(0,0,100,100);
canvas.drawColor(Color.WHITE);
mPaint.setColor(Color.RED);
canvas.drawLine(0,0,100,100,mPaint);
mPaint.setColor(Color.GREEN);
canvas.drawCircle(30,70,30,mPaint);
mPaint.setColor(Color.BLUE);
canvas.drawText("剪切",50,20,mPaint);
}
}