矢印の回転用の float 値など、各リスト項目に必要なすべての情報を含むオブジェクトのコレクションをアダプターに保持させます。
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
センサーの変更時に if を確認System.nanoTime() - lastupdated > 500
し、上記の更新コードのみを呼び出します。これにより、更新が 500 ミリ秒間隔に制限されます。