You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

119 lines
3.7 KiB

This file contains invisible Unicode characters!

This file contains invisible Unicode characters that may be processed differently from what appears below. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to reveal hidden characters.

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);
}
}