带圆角的Android自定义WebView

路加

我正在尝试制作一个与常规WebView完全相同的自定义WebView,只是它具有圆角。圆角必须透明,因为我想将此WebView放在对话框中。

我试图像这样制作自定义类:

public class RoundedWebView extends WebView
{
    private Context context;

    private int width;

    private int height;

    public RoundedWebView(Context context)
    {
        super(context);

        initialize(context);
    }

    public RoundedWebView(Context context, AttributeSet attrs)
    {
        super(context, attrs);

        initialize(context);
    }

    public RoundedWebView(Context context, AttributeSet attrs, int defStyleAttr)
    {
        super(context, attrs, defStyleAttr);

        initialize(context);
    }

    private void initialize(Context context)
    {
        this.context = context;
    }

    // This method gets called when the view first loads, and also whenever the
    // view changes. Use this opportunity to save the view's width and height.
    @Override protected void onSizeChanged(int newWidth, int newHeight, int oldWidth, int oldHeight)
    {
        this.width = newWidth;

        this.height = newHeight;

        super.onSizeChanged(newWidth, newHeight, oldWidth, oldHeight);
    }

    @Override protected void onDraw(Canvas canvas)
    {
        int radius = Utilities.dpToPx(context, 5);

        Path clipPath = new Path();

        clipPath.addRoundRect(new RectF(0, 0, width, height), radius, radius, Path.Direction.CW);

        canvas.clipPath(clipPath);

        super.onDraw(canvas);
    }
}

并且这种实现方式在大多数情况下都有效。但是,一旦url完成加载并在屏幕上显示出来,我就失去了WebView的圆角。知道发生了什么吗?

路加

这是我找到的解决方案。在我的onDraw()方法中,我创建了一个倒置,填充,圆角的矩形,然后使用Porter Duff Xfer模式从屏幕上“清除”该区域。这给我留下了一个具有很好的倾斜边缘的WebView,包括WebView完成加载URL的情况。

public class RoundedWebView extends WebView
{
    private Context context;

    private int width;

    private int height;

    private int radius;

    public RoundedWebView(Context context)
    {
        super(context);

        initialize(context);
    }

    public RoundedWebView(Context context, AttributeSet attrs)
    {
        super(context, attrs);

        initialize(context);
    }

    public RoundedWebView(Context context, AttributeSet attrs, int defStyleAttr)
    {
        super(context, attrs, defStyleAttr);

        initialize(context);
    }

    private void initialize(Context context)
    {
        this.context = context;
    }

    // This method gets called when the view first loads, and also whenever the
    // view changes. Use this opportunity to save the view's width and height.
    @Override protected void onSizeChanged(int newWidth, int newHeight, int oldWidth, int oldHeight)
    {
        super.onSizeChanged(newWidth, newHeight, oldWidth, oldHeight);

        width = newWidth;

        height = newHeight;

        radius = Utilities.dpToPx(context, 5);
    }

    @Override protected void onDraw(Canvas canvas)
    {
        super.onDraw(canvas);

        Path path = new Path();

        path.setFillType(Path.FillType.INVERSE_WINDING);

        path.addRoundRect(new RectF(0, getScrollY(), width, getScrollY() + height), radius, radius, Path.Direction.CW);

        canvas.drawPath(path, createPorterDuffClearPaint());
    }

    private Paint createPorterDuffClearPaint()
    {
        Paint paint = new Paint();

        paint.setColor(Color.TRANSPARENT);

        paint.setStyle(Style.FILL);

        paint.setAntiAlias(true);

        paint.setXfermode(new PorterDuffXfermode(Mode.CLEAR));

        return paint;
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

自定义形状(圆角正方形)drawable android

来自分类Dev

在Android上使用自定义颜色的圆角布局

来自分类Dev

自定义形状(圆角正方形)drawable android

来自分类Dev

带按钮的android的自定义通知

来自分类Dev

带复选框的 Android 自定义 ListView

来自分类Dev

如何在Android中制作带有圆角的自定义对话框

来自分类Dev

如何在Android中以编程方式在圆角的imageview中设置自定义背景色

来自分类Dev

Android WebView(4.4)转换自定义URL

来自分类Dev

在android webview中添加自定义进度栏

来自分类Dev

使用自定义软键盘android webview

来自分类Dev

在android app webview中运行自定义javascript

来自分类Dev

Android-动态更改Webview自定义字体

来自分类Dev

添加自定义android webview错误页面

来自分类Dev

带有css圆角的Google地图自定义标记

来自分类Dev

自定义Drawable不为CardView的图像生成圆角

来自分类Dev

如何在Java中绘制自定义的圆角矩形?

来自分类Dev

自定义控件上的问题图圆角

来自分类Dev

自定义视图 - 由线条绘制的圆角矩形的角

来自分类Dev

带浮点的自定义内核GpuMat

来自分类Dev

带自定义指令的表行

来自分类Dev

带按钮的自定义视图

来自分类Dev

带自定义标头的fputcsv

来自分类Dev

带自定义按钮的QLineEdit

来自分类Dev

带.less的自定义光标

来自分类Dev

带自定义标签的CSS宽度

来自分类Dev

带参数的自定义比较器

来自分类Dev

带Typecsript的自定义光标

来自分类Dev

带参数的自定义命令

来自分类Dev

带自定义按钮的QLineEdit