android 2D绘图总结1

1.整体概括: 用"button的绘制"做为实例.
public class MyButton extends Button {--->继承Button. 一般我们都继承View,没有样式
public MyButton(Context context) {
super(context);
}
@Override
protected void onDraw(Canvas canvas) {--->activity加载的时候会自动调用该方法
super.onDraw(canvas);
Paint paint = new Paint();--->画笔:具有颜色和样式等
paint.setColor(Color.RED);
canvas.drawCircle(30, 30, 30, paint);--->画布: 具有绘制相关方法.
}
}
2.各种图形的绘制
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
//画直线.
paint.setColor(Color.RED);
canvas.drawLine(0, 0, 100, 100, paint);
//画圆
paint.setColor(Color.YELLOW);
paint.setStyle(Style.STROKE);//--->设置描边
paint.setStrokeWidth(3);
canvas.drawCircle(30, 30, 40, paint);
//画矩形
paint.setColor(Color.GREEN);
canvas.drawRect(102, 102, 150, 150, paint);
//画椭圆
paint.setColor(Color.BLUE);
paint.setStrokeWidth(1);
RectF oval = new RectF(160, 160, 400, 250);
canvas.drawOval(oval, paint);
//画圆角矩形.
paint.setColor(Color.CYAN);
canvas.drawRoundRect(oval, 20, 30, paint);
//画弧
paint.setColor(Color.WHITE);
canvas.drawArc(oval, 90, 200, true, paint);
//画路径
paint.setColor(Color.GRAY);
Path path = new Path();
path.moveTo(10, 170);
path.lineTo(40, 170);
//FIXME 这里画的x值必须比上一个小? 必须为锐角?
path.lineTo(60, 180);
path.close();
canvas.drawPath(path, paint);
}
3.画Text和Bitmap
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
//画TEXT.这个设置的10,10是按照Text左下角的坐标来显示的.
paint.setColor(Color.RED);
canvas.drawText("this is my drawText", 10, 10, paint);
//画TEXT在path.
Path path = new Path();
path.moveTo(50, 50);
path.lineTo(100, 100);
path.lineTo(100, 150);
canvas.drawPath(path, paint);
paint.setColor(Color.YELLOW);
canvas.drawTextOnPath("this is my draw use drawTextOnPath", path, 0, 0, paint);
//画Bitmap(这个方法相当于切割)
// Bitmap bitmap=((BitmapDrawable) (getResources().getDrawable(R.drawable.ic_launcher))).getBitmap();
Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher);//上面那种方法也行.
Rect src = new Rect(0, 0, 30, 30);
RectF dst = new RectF(11, 11, 60, 60);
canvas.drawBitmap(bitmap, src, dst, paint);
//画Bitmap(这回用matrix:就是整图片的一些旋转,平移啥用的)
matrix.setRotate(60);
matrix.setScale(3, 3);
matrix.setSkew(1, 0);
matrix.setTranslate(100, 100);
//matrix的三种方法set, pre, post. 用set后面的会覆盖前面的.用pre是在set之前.用post是在set之后.多个pret 和post不会产生覆盖.
matrix.preScale(1, 3);
matrix.postRotate(90, 200, 200);
canvas.drawBitmap(bitmap, matrix, paint);
}

原文地址:https://www.cnblogs.com/olvo/p/2447233.html