|
|
package com.example.yangenneng0.myapplication.viewUI;
|
|
|
|
|
|
import android.content.Context;
|
|
|
import android.content.res.TypedArray;
|
|
|
import android.graphics.Canvas;
|
|
|
import android.graphics.Color;
|
|
|
import android.graphics.Paint;
|
|
|
import android.graphics.Path;
|
|
|
import android.graphics.RectF;
|
|
|
import android.util.AttributeSet;
|
|
|
import android.util.TypedValue;
|
|
|
|
|
|
import com.example.yangenneng0.myapplication.R;
|
|
|
|
|
|
class ArrowTextView extends android.support.v7.widget.AppCompatTextView {
|
|
|
|
|
|
private float radius;
|
|
|
private float arrowWidth;
|
|
|
private float arrowHeight;
|
|
|
private int color;
|
|
|
|
|
|
public ArrowTextView(Context context, AttributeSet attrs) {
|
|
|
super(context, attrs);
|
|
|
ini(context, attrs);
|
|
|
}
|
|
|
|
|
|
|
|
|
private void ini(Context context, AttributeSet attrs) {
|
|
|
TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.ArrowTextView);
|
|
|
radius = typedArray.getDimension(R.styleable.ArrowTextView_radius, 0);
|
|
|
arrowWidth = typedArray.getDimension(R.styleable.ArrowTextView_arrowWidth, 0);
|
|
|
arrowHeight = typedArray.getDimension(R.styleable.ArrowTextView_arrowHeight, 0);
|
|
|
color = typedArray.getColor(R.styleable.ArrowTextView_bg, Color.RED);
|
|
|
}
|
|
|
|
|
|
public ArrowTextView(Context context, AttributeSet attrs, int defStyle) {
|
|
|
super(context, attrs, defStyle);
|
|
|
ini(context, attrs);
|
|
|
}
|
|
|
|
|
|
public ArrowTextView(Context context) {
|
|
|
super(context);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* @param arrowWidth 三角形箭头的宽度.......
|
|
|
*/
|
|
|
public void setArrowWidth(float arrowWidth) {
|
|
|
this.arrowWidth = arrowWidth;
|
|
|
invalidate();
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* @param arrowHeight 三角形箭头的高度......
|
|
|
*/
|
|
|
public void setArrowHeight(float arrowHeight) {
|
|
|
this.arrowHeight = arrowHeight;
|
|
|
invalidate();
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* @param radius 矩形四角圆角的半径..........
|
|
|
*/
|
|
|
public void setRadius(float radius) {
|
|
|
this.radius = radius;
|
|
|
invalidate();
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* @param color 箭头矩形的背景色.........
|
|
|
*/
|
|
|
public void setBgColor(int color) {
|
|
|
this.color = color;
|
|
|
invalidate();
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@Override
|
|
|
protected void onDraw(Canvas canvas) {
|
|
|
Paint paint = new Paint();
|
|
|
paint.setColor(color == 0 ? Color.RED : color);
|
|
|
paint.setAntiAlias(true);
|
|
|
if (radius == 0) {
|
|
|
radius = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_PX, 5, getResources().getDisplayMetrics());
|
|
|
}
|
|
|
if (arrowWidth == 0) {
|
|
|
arrowWidth = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_PX, 20, getResources().getDisplayMetrics());
|
|
|
}
|
|
|
if (arrowHeight == 0) {
|
|
|
arrowHeight = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_PX, 15, getResources().getDisplayMetrics());
|
|
|
}
|
|
|
//带圆角的矩形(下边减去三角形的高度...........)
|
|
|
int width = getWidth();
|
|
|
Float height = getHeight() - arrowHeight;
|
|
|
canvas.drawRoundRect(new RectF(0, 0, getWidth(), height), radius, radius, paint);
|
|
|
|
|
|
//画三角形
|
|
|
|
|
|
Path path = new Path();
|
|
|
|
|
|
path.setFillType(Path.FillType.EVEN_ODD);
|
|
|
float xMiddle = width / 2;
|
|
|
float xLeft = xMiddle - arrowWidth / 2;
|
|
|
float xRight = xMiddle + arrowWidth / 2;
|
|
|
float yBottom = height + arrowHeight;
|
|
|
path.moveTo(xMiddle, yBottom);
|
|
|
path.lineTo(xLeft, height-1);
|
|
|
path.lineTo(xRight, height-1);
|
|
|
path.lineTo(xMiddle, yBottom);
|
|
|
path.close();
|
|
|
canvas.drawPath(path, paint);
|
|
|
// canvas.restore();
|
|
|
// canvas.translate(left, 0);
|
|
|
super.onDraw(canvas);
|
|
|
|
|
|
}
|
|
|
}
|