自定义View
参考网址:https://blog.csdn.net/qq_27061049/article/details/102574020
Paint的属性
package com.example.demo;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.CornerPathEffect;
import android.graphics.Paint;
import android.graphics.Path;
import android.graphics.PathEffect;
import android.util.AttributeSet;
import android.view.View;
import androidx.annotation.Nullable;
public class MyView extends View {
Paint paint = new Paint();
public MyView(Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
}
@Override
protected void onDraw(Canvas canvas) {
// canvas.drawColor(Color.CYAN);
/**
* 1)setColor() 设置颜色
* 2) setStrokeWidth() 设置宽度
* 3)setAntiAlias(true) 抗齿距
* 4) setAlpha() 设置画笔透明度
* 5)setARGB() 设置透明度 和 颜色
* 6) setStyle() 设置画笔样式
*/
// paint.setColor(Color.RED);
// paint.setAlpha(100);
/**
paint.setARGB(255, 0, 255, 0);
paint.setAntiAlias(true);
paint.setStyle(Paint.Style.STROKE);
paint.setStrokeWidth(50);
canvas.drawCircle(200,200, 100, paint);
paint.setStrokeJoin(Paint.Join.ROUND);
// 画一个矩形
canvas.drawRect(100,400, 600, 800, paint);
// 画一条线
canvas.drawLine(100, 900, 600, 900, paint);
paint.setStrokeCap(Paint.Cap.BUTT);
canvas.drawLine(100, 1000, 600, 1000, paint);
paint.setStrokeCap(Paint.Cap.ROUND);
canvas.drawLine(100, 1100, 600, 1100, paint);
paint.setStrokeCap(Paint.Cap.SQUARE);
canvas.drawLine(100, 1200, 600, 1200, paint);
**/
paint.setStyle(Paint.Style.STROKE);
paint.setStrokeWidth(4);
Path p = new Path();
p.moveTo(100, 100);
p.lineTo(300, 300);
p.lineTo(500, 100);
p.lineTo(600, 300);
PathEffect pathEffect = new CornerPathEffect(100);
paint.setPathEffect(pathEffect);
paint.setAntiAlias(true);
canvas.drawPath(p, paint);
}
}
绘制文字和图片
paint.setTextSize(40);
canvas.drawText("今天天气不错我要写代码", 100, 100, paint);
Bitmap bitmap = BitmapFactory.decodeResource(getResources(),
R.drawable.boyandgirl);
Log.e("bitmap", "width =" + bitmap.getWidth() + " height =" + bitmap.getHeight());
Rect rectScr = new Rect(0,0,1372, 1178);
Rect rectDst = new Rect(100, 200, 786,789);
canvas.drawBitmap(bitmap, rectScr, rectDst, paint);
Matrix变换
package com.example.myapplication;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Matrix;
import android.graphics.Paint;
import android.util.AttributeSet;
import android.view.View;
import androidx.annotation.Nullable;
public class MyView extends View {
Paint paint = new Paint();
public MyView(Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
}
@Override
protected void onDraw(Canvas canvas) {
Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.cat);
canvas.drawBitmap(bitmap, 0, 0, paint);
Matrix matrix = new Matrix();
// 缩放
/*matrix.setScale(-1,1);
matrix.postTranslate(158*2.75f*2, 0);
canvas.drawBitmap(bitmap, matrix, paint);
matrix.setScale(1,-1);
matrix.postTranslate(0, 158*2.75f*2);
canvas.drawBitmap(bitmap, matrix, paint);
matrix.setScale(-1, -1);
matrix.postTranslate(158*2.75f*2, 158*2.75f*2);
canvas.drawBitmap(bitmap, matrix, paint);
matrix.setScale(2,2);
matrix.postTranslate(0, 158*2.75f*2);
canvas.drawBitmap(bitmap, matrix, paint);*/
// 错切
/*matrix.setSkew(0.5F, 0);
canvas.drawBitmap(bitmap, matrix, paint);*/
// 旋转
matrix.setRotate(90, 158 * 2.75F, 158 * 2.75F);
canvas.drawBitmap(bitmap, matrix, paint);
matrix.postRotate(90, 158*2.75F, 158*2.75F);
canvas.drawBitmap(bitmap, matrix, paint);
matrix.postRotate(90, 158*2.75F, 158*2.75F);
canvas.drawBitmap(bitmap, matrix, paint);
}
}