我需要显示 Android 中某些地方的列表ListView
以及那个地方的方向。我可以通过找到位置之间的角度来做到这一点,但问题是我的客户需要在设备旋转或移动时旋转箭头。我没有找到任何可以根据传感器更改旋转箭头的解决方案。他们中的任何一个都满足这样的要求吗?请向我建议一些解决方案,以使列表在此iPhone App中显示为这样。或查看下图。
更新:
我期待任何答案,以便有助于启动以下要求。即使单独显示箭头也是受欢迎的,因此我将尝试实现以下目标。我所做的所有样品都在摇晃,并且不稳定。
我需要显示 Android 中某些地方的列表ListView
以及那个地方的方向。我可以通过找到位置之间的角度来做到这一点,但问题是我的客户需要在设备旋转或移动时旋转箭头。我没有找到任何可以根据传感器更改旋转箭头的解决方案。他们中的任何一个都满足这样的要求吗?请向我建议一些解决方案,以使列表在此iPhone App中显示为这样。或查看下图。
更新:
我期待任何答案,以便有助于启动以下要求。即使单独显示箭头也是受欢迎的,因此我将尝试实现以下目标。我所做的所有样品都在摇晃,并且不稳定。
在您的传感器更改事件处理程序中,调用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();
这样做可以,但是传感器可能变化很快,ListView数据更新过多会导致ListView滞后,限制更新,声明一个long
变量lastUpdated
,在传感器变化时查看是否System.nanoTime() - lastupdated > 500
,然后只调用上面的更新代码。这会将更新限制为 500 毫秒的间隔。