android 圓角的webview
摘要:
近期根據設計需求需要實現一個上邊左右有圓角的webview,如圖:
public class RoundWebview extends WebView{
float width,height =0;
private int radius =0;
...
近期根據設計需求需要實現一個上邊左右有圓角的webview,如圖:

public class RoundWebview extends WebView{ float width,height =0; private int radius =0; public RoundWebview(Context context) { super(context);//此處必需引用父控制元件的構造方法,以使用父控制元件的主題,否則會造成鍵盤的一些問題(具體的忘記了,大家可以試試) } public RoundWebview(Context context, AttributeSet attrs) { super(context, attrs);//此處必需引用父控制元件的構造方法,以使用父控制元件的主題,否則會造成鍵盤的一些問題(具體的忘記了,大家可以試試) } public RoundWebview(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr);//此處必需引用父控制元件的構造方法,以使用父控制元件的主題,否則會造成鍵盤的一些問題(具體的忘記了,大家可以試試) } @Override protected void onLayout(boolean changed, int left, int top, int right, int bottom) { super.onLayout(changed, left, top, right, bottom); width = getWidth(); height = getHeight() + StatusBarUtil.getBottomStatusHeight(getContext()) + StatusBarUtil.getBottomStatusHeight(getContext()); } public void setRadius(int radius) { this.radius = radius; invalidate(); } @Override protected void onDraw(Canvas canvas) { float y =this.getScrollY();//因為webview是可滾動的,所以它的高度是變化的,每個height地方都需要加上滾動值。不加的話控制元件的高度不能變更,此圓角構成方法適用於其他的控制元件,如Imageview,此時無需加y. int r = StatusBarUtil.dp2px(getContext(),radius); if (width > r &&height > r) { Path path = new Path(); path.moveTo(r, 0); path.lineTo(width - r, 0); path.quadTo(width, 0, width, r); path.lineTo(width,y+ height - r);//1,r改為0 path.quadTo(width, y+ height, width - r, y+ height); //2,r改為0 path.lineTo(r, y+ height);//3,r改為0 path.quadTo(0, height, 0, y+ height - r); //4,r改為0 這四處r改為0即可實現上左上右為圓角,否則四角皆為圓角 path.lineTo(0, r); path.quadTo(0, 0, r, 0); if(r >0) { canvas.clipPath(path);//將路徑閉合構成控制元件的區域 } } super.onDraw(canvas); } }