Java-多种颜色/笔触手势,并在同一GestureOverlayView中持续绘制
作者:互联网
这个问题已经在这里有了答案: > Regarding Android Paint drawing color 1个
我已经看到了许多使用手势进行绘制的示例.我的要求是,我想在同一个GestureOverlayView中绘制多个彩色和多个笔触的手势.为了更清楚,请看下面的图片.
如果用户选择不同的颜色和不同的笔画,则绘图应具有相应的颜色/笔画.现在,它绘制不同的颜色和不同的笔触手势,但是如果我选择不同的颜色或不同的笔触,以前绘制的手势也会采用新的颜色或新的笔触.
回答了类似的问题here,但问题相同.
请提示.
<android.gesture.GestureOverlayView
android:id="@+id/signaturePad"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/white"
android:eventsInterceptionEnabled="false"
android:fadeEnabled="false"
android:fadeOffset="122000"
android:gestureStrokeLengthThreshold="0.1"
android:gestureStrokeWidth="6"
android:gestureStrokeType="multiple"
android:orientation="vertical" >
</android.gesture.GestureOverlayView>
在Java代码中,更改颜色代码
mGestureOverlayView.setGestureColor(Color.BLUE);
谢谢.
编辑:认为可以用Canvas来实现相同的功能,并从here获得了代码.它绘制了多条线,但是同样的问题是当我更改颜色/描边时,最近绘制的线也采用了新的颜色/描边.
请在这里建议出什么问题了.
编辑(答案):最终得到解决方案.看看this链接.
解决方法:
恐怕如果不对自己的版本的GestureOverlayView进行大量修改就无法实现.这是您需要更改的部分.
考虑此工作需要什么:
>您将需要可迭代的(或实际上是某种类型的列表)过去的颜色设置-或在Android中需要一堆过去的Paints.
>手势需要以可分离的方式存储.在GestureOverlayView内部,这些文件是使用Android的Path存储的,因此,这些文件必须是可分离的-给定path的api,唯一的方法是将不同的路径实例分别覆盖.
>最后,必须在路径上进行排序,以便可以在颜色和路径之间建立关联.
上面的内容很粗略,使您可以迭代到最新的路径和颜色,并将View的draw(Canvas canvas)方法的实例用于thisViewsCanvas.drawPath(mLatestAddedPaths.next(),mLatestPaintColor.next())foreach路径和油漆.
*最后,有一点优化将是在创建视图时创建每种可用的绘画颜色,并将其针对其颜色进行哈希处理,以节省绘画创建的时间.然后,您的mLatestPaintColor列表将包含油漆的哈希值.
要查看如果查看source,缺少什么,很明显GestureOverlayView正在提供此功能:
>查看您在问题中引用的setGesutreColor(color).所有这些操作都设置了一个字段mCertainGestureColor,该字段随后用于设置所有绘制的颜色.
>明智地,当您调用setGesture(Gesture手势)(即您每次进行手势)时,此类的开发人员将在此特定版本的第286行提取路径:
最终路径path = mCurrentGesture.toPath();
然后,它们没有存储曾经提取的每个路径,而是将新路径(“ path”)与当前存在的主路径(“ mPath”)组合在一起,位于第292行:
mPath.addPath(path, -bounds.left + (getWidth() - bounds.width()) / 2.0f, -bounds.top + (getHeight() - bounds.height()) / 2.0f);
这意味着当涉及到draw(Canvas)时,我们不知道哪个路径以哪个顺序出现.
3.这最终使我了解为什么3不起作用-394行上的draw方法可用的信息仅足以将相同颜色绘制为每个路径:
canvas.drawPath(mPath, mGesturePaint);
因此,完全有可能自己重新实现该类以实现您的目标,但是用当前类尝试实现您想要的目标几乎是不可能的.
标签:gesture,colors,android-canvas,java,android 来源: https://codeday.me/bug/20191030/1969694.html