在Android ListView中显示带有箭头的位置方向

在Android ListView中显示带有箭头的位置方向,android,location,android-sensors,Android,Location,Android Sensors,我需要在AndroidListView中显示一些位置的列表,以及该位置的方向。我可以通过查找位置之间的角度来实现这一点,但问题是,当设备旋转或移动时,我的客户要求旋转箭头。我没有找到任何解决方案,将根据传感器的变化旋转箭头。他们中有人违反了这样的要求吗?请给我建议一些解决方案,使列表显示为此。或者看看下面的图片 更新: 我期待任何答案,这样它将有助于启动以下要求。即使只显示箭头也是受欢迎的,因此我将尝试实现以下目标。我做的所有样品都在震动,它们不稳定 在传感器更改事件处理程序中,调用ListVi

我需要在Android
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),没有人能真正帮助您。