gpt4 book ai didi

android - 在android中绘制箭头

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:30:11 27 4
gpt4 key购买 nike

我正在尝试绘制一个箭头以指向图像中的对象。我已经能够编写代码来绘制线,但似乎无法找到绘制箭头的方法。我编写的用于绘制可拖动线的代码如下。我需要在 ACTION_UP 事件上绘制箭头线指向的方向

if(event.getAction() ==MotionEvent.ACTION_DOWN) {         
if (count==1){
x1 = event.getX();
y1 = event.getY();
System.out.println(count+"count of value a;skd");
Toast.makeText(getApplicationContext(), ""+(radius+count), Toast.LENGTH_LONG).show();

Log.i(TAG, "coordinate x1 : "+String.valueOf(x1)+" y1 : "+String.valueOf(y1));
}
}
else if(event.getAction() ==MotionEvent.ACTION_MOVE){

imageView.setImageBitmap(bmp2);
x2 = event.getX();
y2 = event.getY();
posX=(float)(x1+x2)/2;
posY=(float)(y1+y2)/2;
radius=(float) Math.sqrt((x1-x2)*(x1-x2) + (y1-y2)*(y1-y2))/2;
onDraw();
Toast.makeText(getApplicationContext(), ""+radius, Toast.LENGTH_LONG).show();
}

嗨,对于仍然需要帮助的任何人。这就是我最后的做法 float h=( float ) 30.0;

    float phi = (float) Math.atan2(y2 - y1, x2 - x1); 
float angle1 = (float) (phi - Math.PI / 6);
float angle2 = (float) (phi + Math.PI / 6);

float x3 = (float) (x2 - h * Math.cos(angle1));
float x4 = (float) (x2 - h * Math.cos(angle2));
float y3 = (float) (y2 - h * Math.sin(angle1));
float y4 = (float) (y2 - h * Math.sin(angle2));
c.drawLine(x1, y1,x2,y2 ,pnt);
c.drawLine(x2, y2,x3,y3 ,pnt);
c.drawLine(x2, y2,x4,y4 ,pnt);

我从 stackoverflow 的 accepted answer 和 ios 部分得到了帮助

最佳答案

我将如何做到这一点是找到在两点(起点和终点)之间绘制的直线的斜率。斜率为 (dy/dx),这将是您箭头的良好起点。假设您希望箭头的底部垂直于箭头的直线,要找到底部的斜率,您会找到直线斜率的相反倒数。例如,假设您的线的斜率为 2。三角形底部的斜率为 (-1/2),因为您执行 (1/(oldslope)) 并乘以 -1。我不太了解 android,但如果我没记错的话,在 Java 中,您将使用 drawPolygon 方法,并且您必须指定 4 个点(3 个唯一点和 1 个与第一个点相同以关闭它)。给定尖端底部的斜率,我们可以获得前两个点和最后一个点。在开始绘制要绘制的箭头的尺寸之前,您应该知道,因此在这种情况下,b 将是基线的长度。如果您采用 ϴ=arctan(dy/dx),这将为您提供 x 轴和基线之间的角度。使用该 ϴ 值,您可以执行 ydif = b*sin(ϴ) 以获得箭头两个底角之间 y 值的差异。做同样的事情,但使用 xdif = b*cos(ϴ) 可以得到两个基点之间 x 值的差异。例如,如果用户绘制的线的终点位置是 (x1, y1),则三角形基点的位置将是 (x1-(xdif/2), y1-(ydif/2))(x1+(xdif/2), y1+(ydif/2))。 p1和p2这两个点是绘制多边形方法中的第一、第二和第四个点。要找到第三个点,我们需要通过执行 ϴ=arctan(dy/dx) 找到原始直线的角度,这次使用原始的 dy/dx。以那个角度。在我们完成点的实际计算之前,您首先必须知道箭头的尖端实际应该离线的末端有多远,在我的例子中,我将使用 var h 和 h = 10。要获得坐标 (x,y),假设线尖的坐标是 (x1, y1),您可以执行 (x1+hcosϴ, y1+hsinϴ)。将它用于 drawPolygon() 中的第三个值,您应该完成了。抱歉,如果我最后有点仓促,我有点厌倦了打字,如果您需要帮助,请发表评论。

关于android - 在android中绘制箭头,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17696959/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com