编程语言
首页 > 编程语言> > Java-多种颜色/笔触手势,并在同一GestureOverlayView中持续绘制

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