android - 我们如何将 Canvas 上的绘图与 Android 中的预定义图像进行比较?

标签 android xml canvas drawing

我正在开发一个 Android 应用程序的项目。我需要让用户在预定义的虚线图像上绘图,并显示结果绘图与虚线图像相比的百分比。 例如虚线“A”,用户完全绘制覆盖在虚线“A”上,将显示完成100%。

最佳答案

您可以使用 alpha mask 。我将使用您的示例并进一步解释。

一般的想法是插入一个隐藏的掩码,它基本上是一个具有预定义区域的图像,可以算作正确的轨迹。您使用一种颜色定义该区域,例如红色。

现在您有了一个带有红色 A 的图像。您将该图像覆盖在虚线上,并使其透明(alpha channel )。当用户绘制时,你所要做的就是检查触摸事件是否与隐藏层的红色像素到达相同的位置。如果是,则意味着用户正在跟踪线路。

如果您不想弄乱 alpha channel ,您可以发挥创意并以不同的方式进行。如果我处在你的位置,我只会创建一个普通图像(不需要 alpha channel ),它甚至可以是灰度图像(这甚至可以提高内存效率)并在其上绘制不同的 mask 。

例如 我希望用户追踪 2 个字母:A 和 B。我打开任何基本的图像编辑软件。创建一个灰度图像,其大小与应检测触摸事件的区域完全相同。绘制一个颜色值为 100(灰色)的字母 A,然后绘制一个颜色值为 50(深灰色)的字母 B。保存图像。

在应用程序中,您只需加载该图像并将其作为二维数组保存在内存中。然后你可以使用 onTouchevent()回调以获取触摸事件位置。因此,例如,如果用户在位置 (120,240) 触摸屏幕,您所要做的就是检查您之前在位置 [120][240] 加载的图像数组的值。如果该位置的值为 100,则表示用户正在字母 A 上描写,如果值为 50,则表示用户正在字母 B 上描写。其他值表示用户未正确描写。

关于android - 我们如何将 Canvas 上的绘图与 Android 中的预定义图像进行比较?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10140009/

相关文章:

java - 如何根据登录状态从Button切换到FrameLayout

java - FasterXML:无法将 XML 格式反序列化为 POJO

javascript - 如何选择并拖动与在 Fabricjs 中单击的对象不同的对象?

c# - 如何在 C# 中查找 XSD 根元素

html Canvas 文本大小不准确

javascript - 在 HTML5 Canvas 游戏中为 "room"创建移动边界的好方法是什么?

java - Android 在调用 FragmentTransaction Replace 方法时崩溃?

android 在布局中排列 TextView

java - 学习 Android Java - 应用程序失败

javascript - 追加 .eq() 导致重复