在Android ListView中显示带有箭头的位置方向
我需要在Android在Android ListView中显示带有箭头的位置方向,android,location,android-sensors,Android,Location,Android Sensors,我需要在AndroidListView中显示一些位置的列表,以及该位置的方向。我可以通过查找位置之间的角度来实现这一点,但问题是,当设备旋转或移动时,我的客户要求旋转箭头。我没有找到任何解决方案,将根据传感器的变化旋转箭头。他们中有人违反了这样的要求吗?请给我建议一些解决方案,使列表显示为此。或者看看下面的图片 更新: 我期待任何答案,这样它将有助于启动以下要求。即使只显示箭头也是受欢迎的,因此我将尝试实现以下目标。我做的所有样品都在震动,它们不稳定 在传感器更改事件处理程序中,调用ListVi
ListView
中显示一些位置的列表,以及该位置的方向。我可以通过查找位置之间的角度来实现这一点,但问题是,当设备旋转或移动时,我的客户要求旋转箭头。我没有找到任何解决方案,将根据传感器的变化旋转箭头。他们中有人违反了这样的要求吗?请给我建议一些解决方案,使列表显示为此。或者看看下面的图片
更新:
我期待任何答案,这样它将有助于启动以下要求。即使只显示箭头也是受欢迎的,因此我将尝试实现以下目标。我做的所有样品都在震动,它们不稳定
在传感器更改事件处理程序中,调用
ListView.invalidateViews()
。这将导致重新绘制ListView中的所有现有视图。因此,如果您当前可以正确绘制列表并根据需要从传感器获取事件,那么添加此调用应该可以获得所需的行为。让适配器保存一组对象,其中包含每个列表上所需的所有信息
项目,包括用于箭头旋转的浮点值
public class Place {
private Srting name;
private double distance;
private float arrowAngle;
//-- etc etc--
覆盖适配器的getView()
,设置箭头视图的旋转:
@Override
public View getView(View currentView, int position, ViewGroup parent){
//--inflate layout for each row, find views, set values etc etc--
Place p = getItem(position);
arrowView.setRotation(p.getArrowAngle());
//--return inflated view --
}
更改传感器时,计算每个箭头的新角度,并更新适配器中的每个数据对象
for (int i = 0 ; i < adapter.getCount(); i++){
Place p = adapter.getItem(i);
//--calculate angle--
p.setArrowAngle(newAngle);
}
adapter.notifyDataSetChanged();
for(inti=0;i
这就可以了,但是传感器可能变化非常快,ListView数据更新过多会导致ListView滞后,为了限制更新,请声明一个
long
变量lastUpdated
,在传感器变化时查看System.nanoTime()-lastUpdated>500
,然后只调用上述更新代码。这会将更新限制在500毫秒的间隔。您在哪一部分遇到问题?您在获取传感器的方向或显示箭头时遇到问题,这些箭头会根据列表视图中的传感器而变化。我已经实现了如何从两个不同的位置值获取方向,并在不使用传感器的情况下计算角度。现在我要求将其应用于listview中的所有项目,如上图所示。我还用sensor实现了它,它在最初显示正确,当移动设备时,问题开始了,因为它不能保持稳定,永远不会到达稳定的位置,总是摇动到错误的方向,而看不到您的代码(对于ListView的适配器和sensor change listener),没有人能真正帮助您。