new_bitmap = Bitmap.createBitmap(width, height, Config.ARGB_8888);//创建一个位图 ARGB_8888 代表32位ARGB位图
paint = new Paint();//实例化paint类 画笔类
paint.setAntiAlias(true);//设置画笔的锯齿效果
paint.setDither(true); //防抖动
mCanvas = new Canvas(new_bitmap);//实例化 画布 fore_bitmap类当参数
mCanvas.drawColor(Color.TRANSPARENT);//设置画布颜色为透明
matrix = new Matrix();
//缩放 ?它采用两个浮点数作为参数,分别表示在每个轴上所产生的缩放量。第一个参数是x轴的缩放比例,而第二个参数是y轴的缩放比例。
matrix.setScale(width * 1.0f / fore_bitmap.getWidth(), height * 1.0f / fore_bitmap.getHeight());
mCanvas.drawBitmap(fore_bitmap, matrix, paint);//绘制图像
fore_bitmap.recycle();//回收
paint.setColor(Color.RED);//设置画笔颜色
paint.setStrokeWidth(20);//设置描边宽度
BlurMaskFilter bmf = new BlurMaskFilter(10, BlurMaskFilter.Blur.NORMAL);//指定了一个模糊的样式和半径来处理Paint的边缘。
paint. setMaskFilter(bmf);//为Paint分配边缘效果。
paint.setStyle(Paint.Style.STROKE);//让画出的图形是空心的
paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_OUT));//它的作用是用此画笔后,画笔划过的痕迹就变成透明色了。画笔设置好了后,就可以调用该画笔进行橡皮痕迹的绘制了
paint.setStrokeJoin(Paint.Join.ROUND);//设置结合处的样子 Miter:结合处为锐角, Round:结合处为圆弧:BEVEL:结合处为直线。
paint.setStrokeCap(Paint.Cap.SQUARE);//画笔笔刷类型 ? 方形形状
path = new Path();//实例化画图类
}
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
canvas.drawBitmap(back_bitmap, matrix, null);//绘制图像
canvas.drawBitmap(new_bitmap, 0, 0, null);//绘制图像
}
public boolean onTouchEvent(MotionEvent event) {
int x = (int) event.getX();//获得触摸的X轴位置
int y = (int) event.getY();//获得触摸的Y轴位置
int position = event.getAction();//获得的返回值 获取触控动作比如ACTION_DOWN
int endX = 0;//声明变量endX
int endY = 0;//声明变量endY
switch (position){
case MotionEvent.ACTION_DOWN://当触摸时按下时
startX = x;
startY = y;
endX = x;
endY = y;
break;
case MotionEvent.ACTION_MOVE://当触摸移动时
endX = x;
endY = y;
break;
case MotionEvent.ACTION_UP://当触摸结束时
endX = x;
endY = y;
break;
}
path.moveTo(startX, startY);//起始点
path.lineTo(endX, endY);//终点
mCanvas.drawPath(path, paint);//绘制图像
postInvalidate();//刷新界面
startX = endX;//将 endX值 也就是停止触摸时X轴的位置 付给 startX当中
startY = endY;//将 endY值 也就是停止触摸时X轴的位置 付给 startY当中
return true;
}
/**
* 用来回收内存
*/
public void realease(){
if(null != back_bitmap && !new_bitmap.isRecycled()){
back_bitmap.recycle();
} if(null != new_bitmap && !new_bitmap.isRecycled()){
结语
由于篇幅限制,文档的详解资料太全面,细节内容太多,所以只把部分知识点截图出来粗略的介绍,每个小节点里面都有更细化的内容!以下是目录截图:
由于整个文档比较全面,内容比较多,篇幅不允许,下面以截图方式展示 。
再附一部分Android架构面试视频讲解:
化的内容!以下是目录截图:**
[外链图片转存中…(img-FAr6qhs4-1643875887945)]
由于整个文档比较全面,内容比较多,篇幅不允许,下面以截图方式展示 。
再附一部分Android架构面试视频讲解:
[外链图片转存中…(img-9CQzoJDD-1643875887946)]
本文已被CODING开源项目:《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》收录
|