package com.mylhyl.circledialog.res.drawable;
|
|
import android.graphics.Canvas;
|
import android.graphics.ColorFilter;
|
import android.graphics.Paint;
|
import android.graphics.Path;
|
import android.graphics.PixelFormat;
|
import android.graphics.Rect;
|
import android.graphics.drawable.Drawable;
|
import android.view.Gravity;
|
|
import androidx.annotation.NonNull;
|
import androidx.annotation.Nullable;
|
|
/**
|
* Created by hupei on 2018/8/3 8:58.
|
*/
|
public class TriangleDrawable extends Drawable {
|
|
private final int mTriangleDirection;
|
private final int mColor;
|
|
public TriangleDrawable(int triangleDirection, int color) {
|
this.mTriangleDirection = triangleDirection;
|
this.mColor = color;
|
}
|
|
@Override
|
public void draw(@NonNull Canvas canvas) {
|
Paint paint = new Paint();
|
paint.setAntiAlias(true);
|
paint.setColor(mColor);
|
paint.setStyle(Paint.Style.FILL);
|
Path path = createPath();
|
canvas.drawPath(path, paint);
|
}
|
|
private Path createPath() {
|
Rect bound = getBounds();
|
Path path = new Path();
|
switch (mTriangleDirection) {
|
case Gravity.LEFT:
|
path.moveTo(bound.right / 2, bound.bottom / 2);
|
path.lineTo(bound.right, 0);
|
path.lineTo(bound.right, bound.bottom);
|
break;
|
case Gravity.TOP:
|
path.moveTo(bound.right / 2, bound.bottom / 2);
|
path.lineTo(0, bound.bottom);
|
path.lineTo(bound.right, bound.bottom);
|
break;
|
case Gravity.RIGHT:
|
path.moveTo(bound.right / 2, bound.bottom / 2);
|
path.lineTo(0, 0);
|
path.lineTo(0, bound.bottom);
|
break;
|
case Gravity.BOTTOM:
|
path.moveTo(bound.right / 2, bound.bottom / 2);
|
path.lineTo(0, 0);
|
path.lineTo(bound.right, 0);
|
break;
|
}
|
path.close();
|
return path;
|
|
}
|
|
@Override
|
public void setAlpha(int alpha) {
|
}
|
|
@Override
|
public void setColorFilter(@Nullable ColorFilter colorFilter) {
|
|
}
|
|
@Override
|
public int getOpacity() {
|
return PixelFormat.UNKNOWN;
|
}
|
}
|