我要求显示Android ListView
中某些地方的列表以及该地点的方向。我能够找到位置之间的角度,但问题是我的客户端需要在旋转或移动设备时旋转箭头。我没有找到任何按照传感器更改旋转箭头的解决方案。在这样的要求中做任何一个吗?请建议我一些解决方案,以便在此iPhone App中显示列表。或者看下面的图像。
更新:
我期待任何答案,这将有助于启动以下要求。即使单独显示箭头也是受欢迎的,因此我将尽力实现以下目标。我所做的所有样品都在摇晃而且不稳定。
答案 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毫秒的间隔。