在Android ListView中使用箭头显示地方的方向

时间:2013-02-02 05:32:49

标签: android location android-sensors

我要求显示Android ListView中某些地方的列表以及该地点的方向。我能够找到位置之间的角度,但问题是我的客户端需要在旋转或移动设备时旋转箭头。我没有找到任何按照传感器更改旋转箭头的解决方案。在这样的要求中做任何一个吗?请建议我一些解决方案,以便在此iPhone App中显示列表。或者看下面的图像。

更新:

我期待任何答案,这将有助于启动以下要求。即使单独显示箭头也是受欢迎的,因此我将尽力实现以下目标。我所做的所有样品都在摇晃而且不稳定。

enter image description here

2 个答案:

答案 0 :(得分:2)

在传感器更改事件处理程序中,调用ListView.invalidateViews()。这将导致ListView中的所有现有视图重绘。所以,如果你现在正好可以正确地绘制列表并从传感器中获取事件,那么添加这个调用可以获得你想要的行为。

答案 1 :(得分:2)

让适配器在每个列表中保存一个包含所需信息的对象集合     item,包括用于旋转箭头的浮点值。

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();

这样做会有,但传感器可能会变化得非常快,而ListView数据的过多更新会导致ListView滞后,限制更新,声明long变量lastUpdated,On传感器更改请参阅System.nanoTime() - lastupdated > 500,然后只调用上面的更新代码。这将限制更新为500毫秒的间隔。