Android 三角箭头

在 Android 开发中,我们经常需要使用到三角箭头来指示某些操作或者表示特定的状态。本文将介绍如何在 Android 中实现三角箭头,并且提供代码示例。

实现方法

实现三角箭头有多种方法,以下是其中两种常用的方法。

方法一:使用自定义绘制

通过自定义 View,在其 onDraw() 方法中绘制三角箭头。

首先创建一个名为 TriangleArrowView 的类,继承自 View。在该类的构造方法中初始化一些参数,比如箭头的颜色、宽度和高度。

public class TriangleArrowView extends View {
    private Paint paint;
    private int color;
    private int arrowWidth;
    private int arrowHeight;

    public TriangleArrowView(Context context, int color, int arrowWidth, int arrowHeight) {
        super(context);
        this.color = color;
        this.arrowWidth = arrowWidth;
        this.arrowHeight = arrowHeight;
        init();
    }

    private void init() {
        paint = new Paint();
        paint.setColor(color);
        paint.setStyle(Paint.Style.FILL);
        paint.setAntiAlias(true);
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);

        int width = getWidth();
        int height = getHeight();

        Path path = new Path();
        path.moveTo(width / 2, 0);
        path.lineTo(0, height);
        path.lineTo(width, height);
        path.close();

        canvas.drawPath(path, paint);
    }
}

在布局文件中使用 TriangleArrowView。

<LinearLayout xmlns:android="
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <!-- 其他视图 -->

    <com.example.trianglearrow.TriangleArrowView
        android:layout_width="60dp"
        android:layout_height="40dp"
        android:layout_gravity="center"
        android:layout_marginTop="16dp"
        android:layout_marginBottom="16dp"
        android:color="#FF0000"
        android:arrowWidth="40"
        android:arrowHeight="20" />

    <!-- 其他视图 -->

</LinearLayout>

方法二:使用 Drawable

通过自定义 Drawable,重写其 draw() 方法绘制三角箭头。

首先创建一个名为 TriangleArrowDrawable 的类,继承自 Drawable。在该类的构造方法中初始化一些参数,比如箭头的颜色、宽度和高度。

public class TriangleArrowDrawable extends Drawable {
    private Paint paint;
    private int color;
    private int arrowWidth;
    private int arrowHeight;

    public TriangleArrowDrawable(int color, int arrowWidth, int arrowHeight) {
        this.color = color;
        this.arrowWidth = arrowWidth;
        this.arrowHeight = arrowHeight;
        init();
    }

    private void init() {
        paint = new Paint();
        paint.setColor(color);
        paint.setStyle(Paint.Style.FILL);
        paint.setAntiAlias(true);
    }

    @Override
    public void draw(@NonNull Canvas canvas) {
        Rect bounds = getBounds();
        int width = bounds.right - bounds.left;
        int height = bounds.bottom - bounds.top;

        Path path = new Path();
        path.moveTo(width / 2, 0);
        path.lineTo(0, height);
        path.lineTo(width, height);
        path.close();

        canvas.drawPath(path, paint);
    }

    @Override
    public void setAlpha(int alpha) {
        paint.setAlpha(alpha);
        invalidateSelf();
    }

    @Override
    public void setColorFilter(@Nullable ColorFilter colorFilter) {
        paint.setColorFilter(colorFilter);
        invalidateSelf();
    }

    @Override
    public int getOpacity() {
        return PixelFormat.TRANSLUCENT;
    }
}

在布局文件中使用 TriangleArrowDrawable。

<LinearLayout xmlns:android="
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <!-- 其他视图 -->

    <ImageView
        android:layout_width="60dp"
        android:layout_height="40dp"
        android:layout_gravity="center"
        android:layout_marginTop="16dp"
        android:layout_marginBottom="16dp"
        android:src="@drawable/triangle_arrow"
        android:tint="#FF0000" />

    <!-- 其他视图 -->

</LinearLayout>

示例

下面是一个使用自定义绘制的代码示例:

public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
}
<LinearLayout xmlns:android="http://