当前位置: 首页 > 面试题库 >

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

马侯林
2023-03-14
问题内容

我刚接触Android,并且一直在研究Canvas。我正在尝试绘制箭头,但是在绘制轴时运气不好,没有一个箭头在起作用。

我进行了一些搜索,找到一个Java示例,但是Android没有GeneralPathor AffineTransform

现在,我的代码如下所示(箭头看上去完全不像箭头):

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


问题答案:

如何使用“ 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绘制有向箭头。 目前,我正在使用课堂画线 但是仅出现该行,而没有出现定向箭头。 用于绘制有向箭头。当两个线段相遇时应用。 我正在绘制的线与矩形的边界相交,但未绘制有向箭头。仅画一条简单的线。 我有什么想念的吗? 问题答案: 如果折角处于特定角度,则在折线的线段之间绘制斜角。如果您绘制的线恰巧是在某些具有某种特定颜色的其他像素附近绘制的,则没有任何关系- 绘制矩形后,Gr

  • 主要内容:示例可以使用类的方法在图像上绘制箭头线。 以下是这种方法的语法 - 该方法接受以下参数 - mat - 表示要在其上绘制矩形的图像的对象。 pt1 和 pt2 - 两个对象,表示要绘制的矩形的顶点。 color - 表示矩形颜色的标量对象(BGR)。 示例 以下程序演示如何在图像上绘制箭头线并使用JavaFX窗口显示它。 执行上面示例代码,您将会看到以下结果 -

  • 我想画一些垂直线来跟踪任务,如下图中的红线所示。我相信可以使用甘特图绘制器绘制线条。 我想要的是在绘制任务期间存储直线endpoint的坐标,然后最终在绘图中绘制这些直线。 我想知道是否有一种方法可以让你在绘图上绘制任何东西,以及这是否是解决这个问题的正确方法。 以下是我的甘特图渲染器代码: 更新: 似乎LineAnnotics是实现这些行的最佳方式。Link1

  • 问题内容: 如何仅在CSS中制作此箭头? 我正在建立一个类似向导的订购过程,该菜单具有以下菜单: 活动页面显示为绿色(在本例中为Model)。 如何仅使用CSS制作此箭头? 目前,我通过使用多个div和图像来实现自己的目标: 我找到了一个能做到这一点的SO答案: CSS的Arrow Box,但是我在左侧的缩进方面遇到了麻烦。 如果您对如何执行此操作有更好的想法,请告诉我! 问题答案: 如果箭头之间

  • 编辑我试图找出我的代码有什么问题,我开始绘制简单的图形,看看箭头在较小的图形上会是什么样子。我听到以下命令: 我试图生成一个网络的情节,出于某种原因,我的箭头看起来像小矩形,而不是通常的三角形箭头。 以下是我用于绘图的代码: 下面是一个示例图: 当我为。 我的代码有什么问题?这可能与R的版本有关吗?我以前用非常类似的命令绘制了很多图,我从来没有遇到过问题。 这里是带有节点信息和边缘列表的文件。

  • 在百度地图javascript API中绘制线图层,如下图所示 https://lbsyun.baidu.com/jsdemo.htm#strokeLineLayer 如何使蓝色线中的箭头像水流一样流动?