自定义的属性
<?xml version="1.0" encoding="utf-8"?>
<resources>
<declare-styleable name="RedDotTextView">
<attr name="shadowWidth" format="dimension" />
<attr name="circleBackground" format="reference|color" />
</declare-styleable>
</resources>
java代码
public class RedDotTextView extends AppCompatTextView {
private Paint mPaint;
private RectF mBgRect;
private int mShadowWidth;
private int mBgColor;
public RedDotTextView(Context context) {
super(context);
init(context, null);
}
public RedDotTextView(Context context, AttributeSet attrs) {
super(context, attrs);
init(context, attrs);
}
public RedDotTextView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
init(context, attrs);
}
private void init(Context context, AttributeSet attrs){
if (attrs != null) {
TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.RedDotTextView, 0, 0);
try {
if (a.hasValue(R.styleable.RedDotTextView_shadowWidth)) {
mShadowWidth = a.getDimensionPixelSize(R.styleable.RedDotTextView_shadowWidth, -1);
}
if (a.hasValue(R.styleable.RedDotTextView_circleBackground)) {
mBgColor = a.getColor(R.styleable.RedDotTextView_circleBackground, 0);
}
} finally {
a.recycle();
}
}
mPaint = new Paint();
mPaint.setStyle(Paint.Style.FILL);
mPaint.setAntiAlias(true);
mPaint.setColor(mBgColor);
mPaint.setShadowLayer(1, 0, mShadowWidth, Color.parseColor("#7f565656"));
setLayerType(LAYER_TYPE_SOFTWARE, mPaint);
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
}
@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
super.onSizeChanged(w, h, oldw, oldh);
int width = getWidth();
mBgRect = new RectF(0, 0, width, width);
}
@Override
protected void onDraw(Canvas canvas) {
canvas.drawArc(mBgRect, 0, 360, false, mPaint);
super.onDraw(canvas);
}
}
使用:
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.test.reddottextview.MainActivity">
<com.test.reddottextview.RedDotTextView
android:layout_width="50dp"
android:layout_height="51dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:shadowWidth="1dp"
app:circleBackground="@color/colorAccent"
android:text="hello"
android:gravity="center"/>
</android.support.constraint.ConstraintLayout>
效果: