我正在查看Google的一个示例应用程序,它使用canvas处理触摸绘图:
我有些疑惑:
我无法理解Canvas与角色的作用 位图。
在drawPoint
函数中,我无法做到
了解此代码段:
mCanvas.drawCircle(x, y, radius, mPaint); mRect.set((int) (x - radius - 2), (int) (y - radius - 2), (int) (x + radius + 2), (int) (y + radius + 2)); invalidate(mRect);
如果圆圈已经被绘制到上面的画布中,那么在onDraw
函数中会发生以下代码:
canvas.drawBitmap(mBitmap, 0, 0, null);
答案 0 :(得分:2)
画布与位图
Bitmap
就是名字所暗示的:正常图像作为位图。 Canvas
类是位图的编辑器。您可以使用它来更改位图数据,它包含所有绘图方法。此原则的行为类似于共享首选项(如果您已经使用过它们),您有一个包含首选项的SharedPreferences
类,以及一个用于更改内容的Editor
类。
绘制圆圈
此代码与double buffering类似。 drawPoint()
基本上在mBitmap
对象¹中画了一个圆圈。 但是此位图对象尚不可见。它存在于记忆中。调用onDraw()
时,它有一个Canvas
参数,表示视图的绘图表面。 drawBitmap()
所做的就是使用内存中准备好的位图并在视图图形表示中绘制它以使其可见。
¹使用过的画布mCanvas
与mBitmap
内的onSizeChanged()
答案 1 :(得分:0)
来自Android SDK:
Canvas 类包含“绘制”调用。要绘制一些东西,你需要4个基本组件:一个 Bitmap 来保存像素,一个Canvas来托管绘制调用(写入位图),一个绘图基元(例如Rect,Path) ,文本,位图)和绘画(描述绘图的颜色和样式)。
我假设你指的是这个片段:
@Override protected void onDraw(Canvas canvas) {
if (mBitmap != null) {
canvas.drawBitmap(mBitmap, 0, 0, null);
}
}
好吧它看起来像是一个继承的onDraw
方法的覆盖,默认情况下可能“什么都不做”,因此覆盖实际上给它一些行为,在这种情况下给定一个非空的Bitmap实例,使得画布画它。
答案 2 :(得分:0)
如果你去开发者参考:
drawBitmap(位图位图,左浮动,浮动顶部,绘画)
画出 指定的位图,其上/左角为(x,y),使用 指定的油漆,由当前矩阵转换。
然后,如果你看到类中不存在mBitmap,那就会导致var来自另一个活动的扩展。
Canvas还具有setBitmap(位图位图)功能。然后解决方案就是在画布中绘制一个位图对象。