效果下方百分之进度条加圆角:

package com.android.settings.widget;import android.content.Context;import android.graphics.Canvas;import android.graphics.Path;import android.graphics.RectF;import android.graphics.drawable.ColorDrawable;import android.util.AttributeSet;import android.widget.RelativeLayout;/** * Created by Sgq * Create Date 2019/7/29 and 16:35 * desc: 圆角的RelativeLayout */public class RoundRectLayout extends RelativeLayout {    private Path mPath;    private int mRadius;    private int mWidth;    private int mHeight;    private int mLastRadius;    public static final int MODE_NONE = 0;    public static final int MODE_ALL = 1;    public static final int MODE_LEFT = 2;    public static final int MODE_TOP = 3;    public static final int MODE_RIGHT = 4;    public static final int MODE_BOTTOM = 5;    private int mRoundMode = MODE_ALL;    public RoundRectLayout(Context context) {        super(context);        init();    }    public RoundRectLayout(Context context, AttributeSet attrs) {        super(context, attrs);        init();    }    private void init(){        setBackgroundDrawable(new ColorDrawable(0x33ff0000));        mPath = new Path();        mPath.setFillType(Path.FillType.EVEN_ODD);        setCornerRadius(15);    }    /**     * 设置是否圆角裁边     * @param roundMode     */    public void setRoundMode(int roundMode){        mRoundMode = roundMode;    }    /**     * 设置圆角半径     * @param radius     */    public void setCornerRadius(int radius){        mRadius = radius;    }    private void checkPathChanged(){        if(getWidth() == mWidth && getHeight() == mHeight && mLastRadius == mRadius){            return;        }        mWidth = getWidth();        mHeight = getHeight();        mLastRadius = mRadius;        mPath.reset();        switch (mRoundMode){            case MODE_ALL:                mPath.addRoundRect(new RectF(0, 0, mWidth, mHeight), mRadius, mRadius, Path.Direction.CW);                break;            case MODE_LEFT:                mPath.addRoundRect(new RectF(0, 0, mWidth, mHeight),                        new float[]{mRadius, mRadius, 0, 0, 0, 0, mRadius, mRadius},                        Path.Direction.CW);                break;            case MODE_TOP:                mPath.addRoundRect(new RectF(0, 0, mWidth, mHeight),                        new float[]{mRadius, mRadius, mRadius, mRadius, 0, 0, 0, 0},                        Path.Direction.CW);                break;            case MODE_RIGHT:                mPath.addRoundRect(new RectF(0, 0, mWidth, mHeight),                        new float[]{0, 0, mRadius, mRadius, mRadius, mRadius, 0, 0},                        Path.Direction.CW);                break;            case MODE_BOTTOM:                mPath.addRoundRect(new RectF(0, 0, mWidth, mHeight),                        new float[]{0, 0, 0, 0, mRadius, mRadius, mRadius, mRadius},                        Path.Direction.CW);                break;        }    }    @Override    public void draw(Canvas canvas) {        if(mRoundMode != MODE_NONE){            int saveCount = canvas.save();            checkPathChanged();            canvas.clipPath(mPath);            super.draw(canvas);            canvas.restoreToCount(saveCount);        }else {            super.draw(canvas);        }    }}
          

更多相关文章

  1. android 自定义提示弹窗效果
  2. android上开源的酷炫的交互动画和视觉效果
  3. Dialog弹出后 Activity蒙层效果代码
  4. Android 设置TextView滑动滚动条和滑动效果
  5. Android图片缩放效果代码
  6. android TextView 实现自定义文字点击效果
  7. Android中的Button自定义点击效果
  8. android使用xml实现虚线效果

随机推荐

  1. Android菜鸟笔记-调用相机拍照后返回照片
  2. 转:ANDROID音频系统散记之四:4.0音频系统HA
  3. iPhone, Android, BlackBerry 用户在自己
  4. Android(安卓)底部支付弹窗
  5. Android(安卓)studio安装:
  6. Android(安卓)开发者必知必会的权限管理
  7. 玩转Android上透明状态栏,全屏显示以及沉
  8. Android里面classes.dex如何生成
  9. Android(安卓)串口通信之间的发送数据与
  10. ContentProvider中gettype() 和MIME类型