java - 如何绘制箭头(在 Android 中)?

标签 java android draw shapes

我对 Android 还很陌生,一直在玩 Canvas。我正在尝试画一个箭头,但我只是幸运地画了轴,没有一个箭头在工作。

我搜索了一下,找到了一个Java示例,但是Android没有GeneralPathAffineTransform

现在我的代码如下所示(箭头看起来一点也不像箭头):

public class DrawableView extends View {
    Context mContext;
    private int centerX;
    private int centerY;
    private int radius;
    private double arrLength;
    private double arrHeading;
    private int margin = 10;

    public DrawableView(Context context) {
        super(context);
        mContext = context;
    }


    @Override
    protected void onDraw(Canvas canvas) {
        //Paint Background
        Paint background = new Paint();
        background.setColor(getResources().getColor(R.color.background);
        canvas.drawRect(0, 0, getWidth(), getHeight(), background);

        //Set vars for Arrow Paint
        Paint paint = new Paint();
        paint.setColor(getResources().getColor(R.color.arrowColor);
        centerX = getWidth() / 2;
        centerY = getHeight() / 2;
        arrLength = radius - 10;

        if(centerX < centerY)
            radius = centerX - margin;
        else 
            radius = centerY - margin;

        //Draw Shaft
        int[] xy = findArrowPos(arrLength, arrHeading);
        canvas.drawLine(centerX, centerY, xy[0], xy[1], paint);

        //Draw ArrowHead
            //This is where I'm confused

    }

    private int[] findArrowPos(double length, double angle) {
        int[] points = new int[2];
        double theta = Math.toRadians(angle);
        points[0] = centerX + (int) (length * Math.cos(theta));
        points[1] = centerY + (int) (length * Math.sin(theta));
        return points;
    }
}

我查看了以下主题以获得指导:
* http://www.java-forums.org/awt-swing/6241-how-u-rotate-arrow-mark-line-moves-accordingly.html
* How to draw a directed arrow line in Java?

最佳答案

如何使用“Path myPath = new Path();”您将在其中给出 x 和 y 位置以使用线条创建三角形并填充它。您可以阅读它,这是我从某个地方获取的示例。

// create and draw triangles
// use a Path object to store the 3 line segments
// use .offset to draw in many locations
// note: this triangle is not centered at 0,0
paint.setStyle(Paint.Style.STROKE);
paint.setStrokeWidth(2);
paint.setColor(Color.RED);
Path path = new Path();
path.moveTo(0, -10);
path.lineTo(5, 0);
path.lineTo(-5, 0);
path.close();
path.offset(10, 40);
canvas.drawPath(path, paint);
path.offset(50, 100);
canvas.drawPath(path, paint);
// offset is cumlative
// next draw displaces 50,100 from previous
path.offset(50, 100);
canvas.drawPath(path, paint);

关于java - 如何绘制箭头(在 Android 中)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6713757/

相关文章:

java - 如何在 Spring config.xml 中配置 Cron 时区?

java - hadoop eclipse插件未将代码部署到hadoop集群

java - 单击 JButton 时 Java 中 ActionListener 方法中的 FlowControl

ios - 创建加载循环

java - android 绘制曲线

java - 如何定位具有动态连词数的句子?

java - Android 阻止整个应用程序使用后退键功能

android - 无法从 Android 中的 Firebase 中删除节点

android - 为什么 Android 浏览器不会跨越整个浏览器宽度?

java - 使用自引用数组,多边形是不可见的