-
简介
画布(Canvas)是图形编程中一个很普通的概念,通常由三个基本的绘图组件组成:
1.Canvas 提供了绘图方法,可以向底层的位图绘制基本图形。
2.Paint 也称为"刷子",Paint可以指定如何将基本图形绘制到位图上。
3.Bitmap 绘图的表面。
-
使用
1.进行绘画操作(生成图片)
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
//TODO
}
2.手指移动
@Override
public boolean onTouchEvent(MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
touchDown(event);
break;
case MotionEvent.ACTION_MOVE:
touchMove(event);
if (mCallback != null) {
mCallback.onMove();
}
break;
case MotionEvent.ACTION_UP:
//将路径画到bitmap中,即一次笔画完成才去更新bitmap,而手势轨迹是实时显示在画板上
//TODO
break;
}
// 更新绘制
invalidate();
return true;
}
// 手指点下屏幕时调用
private void touchDown(MotionEvent event) {
// 重置绘制路线
mPath.reset();
float x = event.getX();
float y = event.getY();
mX = x;
mY = y;
// mPath绘制的绘制起点
mPath.moveTo(x, y);
}
// 手指在屏幕上滑动时调用
private void touchMove(MotionEvent event) {
final float x = event.getX();
final float y = event.getY();
final float previousX = mX;
final float previousY = mY;
final float dx = Math.abs(x - previousX);
final float dy = Math.abs(y - previousY);
// 两点之间的距离大于等于3时,生成贝塞尔绘制曲线
if (dx >= 3 || dy >= 3) {
// 设置贝塞尔曲线的操作点为起点和终点的一半
float cX = (x + previousX) / 2;
float cY = (y + previousY) / 2;
// 二次贝塞尔,实现平滑曲线;previousX, previousY为操作点,cX, cY为终点
mPath.quadTo(previousX, previousY, cX, cY);
// 第二次执行时,第一次结束调用的坐标值将作为第二次调用的初始坐标值
mX = x;
mY = y;
}
}
3.清除绘画
//TODO
Paint.setColor();
Canvas.drawColor();
invalidate();
3.制作图片(这里压缩成JPEG格式的160*90大小,便于上传)
//filename 是图片保存途径
FileOutputStream fos = new FileOutputStream(new File(filename));
//将 bitmap 压缩成其他格式的图片数据
Bitmap thumbImg = Bitmap.createScaledBitmap(cachebBitmap, 160, 90, true);
thumbImg.compress(Bitmap.CompressFormat.JPEG, 100, fos);
网友评论