我有所有要点画一条线并正确显示画布上的点。但是现在我想在用户触摸时在该存在线上绘制另一条线。我的问题是,如何找到用户触摸该行内部或行外的内容?
答案 0 :(得分:1)
我有一个建议。
这是一种基于谷歌地图和折线的想法,但我认为也应该很容易适应Canvas 2DLine的情况。
使用此方法计算两个LatLng点之间的距离:
/** distance in meters **/
private float distFrom(double lat1, double lng1, double lat2, double lng2) {
double earthRadius = 3958.75;
double dLat = Math.toRadians(lat2 - lat1);
double dLng = Math.toRadians(lng2 - lng1);
double a = Math.sin(dLat / 2) * Math.sin(dLat / 2)
+ Math.cos(Math.toRadians(lat1))
* Math.cos(Math.toRadians(lat2)) * Math.sin(dLng / 2)
* Math.sin(dLng / 2);
double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
double dist = earthRadius * c;
int meterConversion = 1609;
return (float) (dist * meterConversion);
}
当用户点击画布时(为简单起见,想象它只有一行):
现在,如果endToClickLength1 + endToClickLength2 = lineLength(+/- acceptedError),则用户单击该行。
当稍微点击一行时,需要使用acceptedError来扩大边界。
对所有绘制的线执行此操作以判断是否已单击其中一行。