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

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(安卓)studio中音频播放与进度条联动
  2. Android——Notifications笔记
  3. Android实现图片缩放示例
  4. Android(安卓)设置桌面背景
  5. android 自定义提示弹窗效果
  6. Android(安卓)Service一前台服务(四)
  7. android上开源的酷炫的交互动画和视觉效果
  8. android中opengl es基本方法使用说明
  9. Android(安卓)- ScrollView 使用小计 里面嵌套的View 如何设置全

随机推荐

  1. UI
  2. android:screenOrientation的说明
  3. [Android] Android的音频采集
  4. 使用Android自带Ant构建Apk
  5. CyanogenMod | Android(安卓)Community R
  6. Android基础之基本控件
  7. ListView详解
  8. Android(安卓)bt hid(bluedroid)和linux HI
  9. Android(安卓)控件之DatePicker,TimePick
  10. android 启动流程