WebView增加圆角

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

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

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

于是自己重写

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

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

呃,这就很舒服

/**
* 圆角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);
}
}

未经允许不得转载:Python在线学习 » WebView增加圆角

赞 (0)

来吐槽吧 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址