问题标签 [android-canvas]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
21 回答
168228 浏览

android - Android,画布:如何清除(删除)画布(=位图),生活在surfaceView中?

为了制作一个简单的游戏,我使用了一个模板,该模板使用这样的位图绘制画布:

(画布在“run()”中定义/SurfaceView 位于 GameThread 中。)

我的第一个问题是如何清除(或重绘)整个画布以进行新布局?
其次,我怎样才能只更新屏幕的一部分?

0 投票
1 回答
52871 浏览

android - 带有触摸事件的 Canvas 中的图像

看起来很简单,但我在实施方面遇到了问题。

我想要一个在屏幕上显示图像的画布,包括onTouch事件。我已经尝试过ImageView,但我无法使用画布。我已经尝试过SurfaceView并且能够在屏幕上的画布中显示图像,但是我遇到了关于动作 onTouch 事件(缩放、平移)的问题。

我需要画布,因为我将在我的代码中渲染图像。

有人可以告诉我这样做的正确方法吗?

0 投票
3 回答
11624 浏览

android - Android (2D) Canvas 绘图管道的各个部分如何组合在一起?

我想更好地了解 Android (2D) Canvas 绘图管道的组件如何组合在一起。

例如,XferModeShaderMaskFilterColorFilter是如何交互的?这些类的参考文档非常少,CanvasPaint的文档并没有真正添加任何有用的解释。

我也不完全清楚具有固有颜色的绘图操作(例如:drawBitmap,与“矢量”原语如drawRect)如何适应所有这些 - 他们总是忽略Paint's 颜色并使用它们的固有颜色代替吗?

我也很惊讶一个人可以做这样的事情:

这会擦除一个椭圆。在我注意到这一点之前,我的心智模型是绘制到画布(概念上)绘制到单独的“层”,然后使用 Paint 的传输模式与 Canvas 的位图组合该层。如果它像那样简单,那么上面的代码将擦除整个位图(在剪辑区域内),因为 CLEAR总是将颜色(和 alpha)设置为 0,而不考虑源的 alpha。所以这意味着有一种额外的掩蔽将擦除限制为椭圆形。

我确实找到了API 演示,但每个演示都“在真空中”工作,并且没有显示它关注的东西(例如:XferModes)如何与其他东西(例如:ColorFilters)交互。

通过足够的时间和精力,我可以凭经验弄清楚这些部分是如何关联的,或者去破译来源,但我希望其他人已经解决了这个问题,或者更好的是有一些关于管道/绘图模型的实际文档我错过了。

这个问题的灵感来自于看到另一个 SO question 的答案中的代码。

更新

在四处寻找一些文档时,我突然想到,由于我在这里感兴趣的很多东西似乎是在skia之上的一个非常薄的单板,也许有一些 skia 文档会有所帮助。我能找到的最好的东西是文档,SkPaint其中说:

有 6 种类型的效果可以分配给绘画:

  • SkPathEffect - 在生成 Alpha 蒙版之前修改几何体(路径)(例如虚线)
  • SkRasterizer - 组成自定义遮罩层(例如阴影)
  • SkMaskFilter - 在着色和绘制之前修改 alpha 蒙版(例如模糊、浮雕)
  • SkShader - 例如渐变(线性、径向、扫描)、位图图案(钳位、重复、镜像)
  • SkColorFilter - 在应用 xfermode 之前修改源颜色(例如颜色矩阵)
  • SkXfermode - 例如 porter-duff 传输模式、混合模式

它没有明确说明,但我猜这里的效果顺序是它们出现在管道中的顺序。

0 投票
2 回答
3258 浏览

android - 如何在 Android 中删除画线

现在我正在做一个拼图。想要通过点匹配正确的对。假设如果我们连接不匹配对,它希望显示警报并自动删除绘制的线条。现在所有功能都完成了,除了一件事。我对删除画线(自动)一无所知。

安卓可以吗?有什么方法可以去除画线。

0 投票
3 回答
3624 浏览

android - 分层图像加画布

我正在尝试将两张图片放在一起。顶部是透明的。在它们之上,我正在尝试添加一个透明画布,以便用户可以绘制、键入、他们需要做的任何事情,并且底部的两个图像是可见的。

所以我可以让两个图像显示或只是画布。每次我尝试显示画布时,它似乎都在覆盖它们的两个图像中。

这是我到目前为止所拥有的..

现在我怀疑画布不是相对布局的一部分。这可能是问题吗?如果是,我不能做 relativeLayout.addView(mCanvas,lp);

有什么建议么?

0 投票
1 回答
1036 浏览

android - Android——基于异步对象移动的平滑画布平移滚动

我有一个 android 游戏,其中一个球根据加速度计移动。球以可变速度移动。游戏的关卡比智能手机屏幕大得多,因此我在球靠近屏幕边缘时平移画布以适应大关卡。滚动有效,麻烦的是基于球的平滑滚动。

这是一个根据更新之间球的位置变化而变化的尝试:

看起来很紧张。

这是一个基于一些常数而变化的尝试。

对于较低的 shiftFactor 值,它可以平滑滚动,但球很容易“超过”滚动。对于较大的 shiftFactors,滚动变得越来越不稳定。

有什么建议么?谢谢。

0 投票
1 回答
9580 浏览

android - 如何在画布和路径中抗锯齿

我在使用 canvas.clipPath 时遇到问题,它显示锯齿,看起来不平滑,我知道我是否使用了 Paint,我可以使用 mPaint.setFlags(Paint.ANTI_ALIAS_FLAG),这可以抗锯齿,但在我的代码中,我不能使用油漆。

你可以看到我使用 canvas.drawBitmap(bitmap, 0, 0, null); 油漆是空的。如果我需要添加油漆,你能给点建议吗?图片为http://i.6.cn/cvbnm/36/5c/20/5d8d20e3bafe432d792793509f99131e.jpg

编辑:我设置为空的油漆,但没有效果

0 投票
1 回答
2998 浏览

android - android在画布上设置监听器

是否可以在画布中设置侦听器,以便在单击时做出反应?

我很困惑,因为我想用 xy 坐标绘制图像并将 clickListener 设置为图像......

如果是这样,请显示代码....

THX,感谢您的帮助....

0 投票
1 回答
700 浏览

android - 在android中的地图上绘制路径

我需要在我的应用程序中的 2 点之间绘制一条路径。但我找不到任何简单的例子。有没有人知道在 android 的地图上绘制路径?你能帮我吗?

0 投票
3 回答
2171 浏览

android - 画布 FC

我有一个没有错误但保持强制关闭的绘图画布。我不确定为什么要强制关闭。如果有人能帮助我,我对画布一无所知,那就太好了。

记录猫错误

这是我的 Panel 课程的第 59 行

这是我的 CanvasThread 类的第 28 行

如果有帮助,我从这里的教程中找到了这段代码。