涂鸦功能
目录
- content {:toc}
涂鸦功能介绍
创建图形
由各个事项定义好的图形对象实现draw方法来画出对应图形。 如下圆形对象的定义:
public class Circle extends ShapeAbstract {
public Circle(Shapable paintTool) {
super(paintTool);
}
@Override
public void draw(Canvas canvas, Paint paint) {
if (canvas==null || paint == null) {
return;
}
super.draw(canvas, paint);
float cx = (x1 + x2)/2;
float cy = (y1+y2)/2;
float radius = (float) Math.sqrt(Math.pow(x1 - x2, 2)
+ Math.pow(y1 - y2, 2))/2;
canvas.drawCircle(cx, cy, radius, paint);
}
@Override
public String toString() {
return " circle";
}
}
其中x1,x2,x2,y2的含义是手势触摸移动的坐标
x1 = firstCurrentPos.firstX;
y1 = firstCurrentPos.firstY;
x2 = firstCurrentPos.currentX;
y2 = firstCurrentPos.currentY;
其他图示类似方法来定义。 五角星需要数学知识计算如何画图形。 通过Canvas对象来画对应的形状:
canvas.drawLine(float startX, float startY, float stopX, float stopY,@NonNull Paint paint) ;//画直线
canvas.drawPath(@NonNull Path path, @NonNull Paint paint) ;//画路径曲线,五角星
canvas.drawOval(@NonNull RectF oval, @NonNull Paint paint);//画椭圆
canvas.drawRect(float left, float top, float right, float bottom, @NonNull Paint paint);//画矩形或正方形
画笔类型
画笔类型分为:
- 普通
- 模糊
- 浮雕
- 橡皮擦
画笔实现方式
画笔对象:android.graphics.Paint
普通画笔 PlainPen:设置Paint.Style.STROKE 模糊 BlurPen: 设置Paint.Style.STROKE,设置maskFilter
// BlurMaskFilter 指定了一个模糊的样式和半径来处理Paint的边缘。
mBlur = new BlurMaskFilter(8, BlurMaskFilter.Blur.NORMAL);
mPenPaint.setMaskFilter(mBlur);
浮雕 EmbossPen :设置Paint.Style.STROKE,设置maskFilter
// EmbossMaskFilter 指定了光源的方向和环境光强度来添加浮雕效果。
mEmboss = new EmbossMaskFilter(new float[] {
1, 1, 1
}, 0.4f, 6, 3.5f);
mPenPaint.setMaskFilter(mEmboss);
橡皮擦 Eraser:设置PorterDuffXfermode为PorterDuff.Mode.DST_OUT
mEraserPaint
.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_OUT));
结合手势move坐标创建Path然后画贝塞尔曲线
// 画出贝塞尔曲线
private void drawBeziercurve(float x, float y) {
mPath.quadTo(mCurrentX, mCurrentY, (x + mCurrentX) / 2,
(y + mCurrentY) / 2);
}
之后画橡皮曲线
@Override
public void draw(Canvas canvas) {
if (null != canvas) {
canvas.drawPath(mPath, mEraserPaint);
}
}
代码位置
package com.xvideostudio.videoeditor.paintpadinterfaces
package com.xvideostudio.videoeditor.paintshapes
package com.xvideostudio.videoeditor.painttools
package com.xvideostudio.videoeditor.paintutils
package com.xvideostudio.videoeditor.paintviews