【问题标题】:Android draw with finger over webViewAndroid 用手指在 webView 上绘图
【发布时间】:2013-02-01 18:35:57
【问题描述】:

如何在 webView 上绘图,我希望用户能够在 webview 上画圈和涂鸦。手势覆盖视图会很好,但是当用户将手指从屏幕上移开后,绘制的线总是会消失。

我希望用户能够在屏幕上绘图,并在手指离开时将绘制的线条保留在那里。

非常感谢

【问题讨论】:

    标签: android touch overlay android-webview draw


    【解决方案1】:

    您可以在某种 Canvas 下堆叠 WebView,从而允许用户在 RelativeLayout 内通过触摸在其上进行绘画。为了说明这一点,这里举了一个来自 FingerPaint 活动中的 API Demos 项目的示例。

    我稍微修改了该活动以在 MyView 后面显示一个 WebView。我更改了代码以使 MyView 的背景具有 00 alpha(使其不可见)。所以对用户来说,他们看起来好像是在浏览器页面的“顶部”绘制。

    如果您还没有它,请自己获取 API Demos 项目的副本并打开 FingerPaint.java 文件,它位于图形下方。打开后,将 onCreate() 方法编辑为如下所示:

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        RelativeLayout rl = new RelativeLayout(this);
        WebView wv = new WebView(this);
        rl.addView(wv);
        rl.addView(new MyView(this));
        setContentView(rl);
        wv.loadUrl("http://google.com");
        mPaint = new Paint();
        mPaint.setAntiAlias(true);
        mPaint.setDither(true);
        mPaint.setColor(0xFFFF0000);
        mPaint.setStyle(Paint.Style.STROKE);
        mPaint.setStrokeJoin(Paint.Join.ROUND);
        mPaint.setStrokeCap(Paint.Cap.ROUND);
        mPaint.setStrokeWidth(12);
        mEmboss = new EmbossMaskFilter(new float[] { 1, 1, 1 },0.4f, 6, 3.5f);
        mBlur = new BlurMaskFilter(8, BlurMaskFilter.Blur.NORMAL);
    }
    

    然后找到MyView类的onDraw()方法。里面把第一行改成:

    canvas.drawColor(0xFFAAAAAA);
    

    到:

    canvas.drawColor(0x00AAAAAA);
    

    运行应用程序并单击图形->FingerPaint。如果一切顺利,您应该有一个可以使用的 google 主页。

    【讨论】:

    • 谢谢,这很好用。任何改变绘图响应能力的方法都是一个很大的滞后。另外,如何将一些控件从我的布局中带到 webview 之上? :)
    • 您可以通过在 RelativeLayout 上调用 .addView() 并将它们作为参数传递来添加您想要的任何视图,包括按钮等。至于响应性,您必须深入了解其中的触摸方法MyView 类。我不确定你能得到多少更好。它在我的设备上似乎反应灵敏。
    • 我启用了硬件加速并完成了这项工作,在启用之前它非常滞后。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多