开头必水,说是做弧形布局,不如说是Draw绘制这块踩坑,因为会对绘制结果进行裁剪(clipPath),而Path则是绘制贝塞尔曲线的结果。裁剪的通病用过的基本都知道,那就是抗锯齿,非常恶心,各种抗锯齿的办法基本GG。所以...我不打算用clip系列的办法(滑稽.jpg),而是Xfermode。Xfermode用起来问题也不大(参考链接),链接是别人的,基本知道是个啥就行了,没必要全部看完。
弧形布局大概长这样:
基本就是一个 FrameLayout 里边重写dispatchDraw()方法,通过绘制贝塞尔曲线 + Xfermode实现。具体方法是先在一个空白画布上绘制好一个弧形,通过Xfermode实现最终效果。
基本的初始化
private Paint mPaint;
private PaintFlagsDrawFilter mDrawFilter;
private PorterDuffXfermode mXfermode;
private Path mPath;
private void init() {
mPaint = new Paint();
//绘制贝塞尔曲线
mPath = new Path();
//启用硬件加速,否则会出现一些异常(比如黑边,设计器和模拟器可能依旧会存在黑边)
setLayerType(View