12

ListViewその場所の方向でAndroidのいくつかの場所のリストを表示する必要があります。位置間の角度を見つけることでそれを行うことができましたが、問題は、クライアントがデバイスを回転または移動したときに矢印を回転させる必要があることです。センサーの変更に従って矢印を回転させるソリューションが見つかりませんでした。それらのいずれかがそのような要件を満たしていますか? このiPhoneアプリでリストをこのように表示するための解決策を教えてください。または下の画像を見てください。

更新しました:

以下の要件を開始するのに役立つような回答を期待しています。矢印だけの表示でも構いませんので、以下を実現してみます。私が行ったすべてのサンプルは揺れており、安定していません。

ここに画像の説明を入力

4

2 に答える 2

2

センサー変更イベント ハンドラーで、 を呼び出しますListView.invalidateViews()。これにより、ListView 内の既存のビューがすべて再描画されます。SO、現在、リストを正しく描画し、センサーから好きなようにイベントを取得できるようになっている場合は、この呼び出しを追加すると、必要な動作が得られます。

于 2013-02-06T03:47:04.713 に答える
2

矢印の回転用の 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 ミリ秒間隔に制限されます。

于 2013-02-11T05:08:02.330 に答える