Android开发自定义圆角带点击效果的Button

来源:互联网 发布:工程造价软件广联达 编辑:程序博客网 时间:2024/06/05 12:23
public class AnimationButton extends Button {    private int mBackGroundColor = Color.parseColor("#ffffff");    private int normalColor;    private int pressedColor;    private float round;    //默认画笔    private Paint mPaint = new Paint(Paint.ANTI_ALIAS_FLAG);    public AnimationButton(Context context, AttributeSet attrs) {        super(context, attrs);        //获取自定义属性        if (attrs != null) {            TypedArray typedArray =context.obtainStyledAttributes(attrs,R.styleable.MyRoundButton);            normalColor = typedArray.getColor(R.styleable.MyRoundButton_normalColor,getResources().getColor(R.color.btn_blue_bg));            pressedColor = typedArray.getColor(R.styleable.MyRoundButton_pressedColor,getResources().getColor(R.color.btn_main_pressed));            round = typedArray.getDimension(R.styleable.MyRoundButton_round,10);            mBackGroundColor = normalColor;            typedArray.recycle();        }        //设置抗锯齿        mPaint.setAntiAlias(true);        //设置防抖动        mPaint.setDither(true);    }    @Override    protected void onDraw(Canvas canvas) {        super.onDraw(canvas);        //画笔颜色        mPaint.setColor(mBackGroundColor);        RectF mBackGroundRect = new RectF(0,0,canvas.getWidth(),canvas.getHeight());        //绘制背景 圆角矩形        if (mBackGroundRect != null) {            canvas.drawRoundRect(mBackGroundRect, round, round, mPaint);        }    }    @Override    public boolean onTouchEvent(MotionEvent event) {        //刷新        invalidate();        //判断点击操作        switch (event.getAction()) {            case MotionEvent.ACTION_DOWN:                mBackGroundColor = normalColor;                break;            case MotionEvent.ACTION_MOVE:                break;            case MotionEvent.ACTION_UP:                mBackGroundColor = pressedColor;                break;            case MotionEvent.ACTION_CANCEL:                break;        }        return super.onTouchEvent(event);    }}

重点:

1.invalidate(),它会调onDraw()

2.RectF mBackGroundRect = new RectF(0,0,canvas.getWidth(),canvas.getHeight())

原创粉丝点击