安卓android webview圆角效果

来源:互联网 发布:linux查看mysql的密码 编辑:程序博客网 时间:2024/05/21 22:43

一开始使用shape的方式实现,发现不行,网页出来以后就会填充满


后来使用搜索引擎,看到其他人实现的webview圆角效果,连接  http://blog.csdn.net/zxwd2015/article/details/64554653

实测,性能太差,卡顿明显



于是自己重写

看了下他的代码,搞了4个path,各种moveTo和lineTo,我就想能不能把4个path合成1个path

或者能不能找到一个函数可以搞定的,找到了addRoundRect函数

呃,这就很舒服


链接:

http://www.cnblogs.com/everhad/p/6161083.html

http://blog.csdn.net/qiushi_1990/article/details/53188554



所以,自己改了下他们的代码

完整代码如下:

↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓

/** * 圆角webview */public class CornersWebView extends WebView {    private float top_left = 0;    private float top_right = 0;    private float bottom_left = 0;    private float bottom_right = 0;    private int vWidth;    private int vHeight;    private int x;    private int y;    private Paint paint1;    private Paint paint2;    private float[] radiusArray = {0f, 0f, 0f, 0f, 0f, 0f, 0f, 0f};    public CornersWebView(Context context, AttributeSet attrs) {        super(context, attrs);        init(context, attrs);    }    public CornersWebView(Context context, AttributeSet attrs, int defStyle) {        super(context, attrs, defStyle);        init(context, attrs);    }    private void init(Context context, AttributeSet attrs) {        paint1 = new Paint();        paint1.setColor(Color.WHITE);        paint1.setAntiAlias(true);        paint1.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_OUT));        paint2 = new Paint();        paint2.setXfermode(null);        final TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.cornersWebView); // 读取xml styleable,attrs是xml属性的集合        top_left = a.getDimension(R.styleable.cornersWebView_top_left, 0);        top_right = a.getDimension(R.styleable.cornersWebView_top_right, 0);        bottom_left = a.getDimension(R.styleable.cornersWebView_bottom_left, 0);        bottom_right = a.getDimension(R.styleable.cornersWebView_bottom_right, 0);        setRadius(top_left, top_right, bottom_right, bottom_left);    }    /**     * 设置四个角的圆角半径     */    public void setRadius(float leftTop, float rightTop, float rightBottom, float leftBottom) {        radiusArray[0] = leftTop;        radiusArray[1] = leftTop;        radiusArray[2] = rightTop;        radiusArray[3] = rightTop;        radiusArray[4] = rightBottom;        radiusArray[5] = rightBottom;        radiusArray[6] = leftBottom;        radiusArray[7] = leftBottom;    }    @Override    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {        super.onMeasure(widthMeasureSpec, heightMeasureSpec);        vWidth = getMeasuredWidth();        vHeight = getMeasuredHeight();    }    @Override    public void onDraw(Canvas canvas) {        Log.e("jiejing", "onDraw");        x = this.getScrollX();        y = this.getScrollY();        Path path = new Path();        path.addRoundRect(new RectF(0, y, x + vWidth, y + vHeight), radiusArray, Path.Direction.CW);        // 使用半角的方式,性能比较好        canvas.clipPath(path);        super.onDraw(canvas);    }}




注意:

cavas.clipPath不支持硬件加速,记得在AndroidManifest.xml中设置不使用硬件加速。不然效果出不来

或者myView.setLayerType(View.LAYER_TYPE_HARDWARE, null);关闭硬件加速

原创粉丝点击