2

ListViewがあり、リストとともにスクロールする背景を作成したいと思います。

GridViewのすべてのアイテムが同じ高さであるために機能するShelvesのコードを見ました。これは、私が作成できないことを保証するものです。同様の手法(つまり、dispatchDrawをオーバーライドする)を使用できると思いますが、各アイテムのListViewの上部からの距離を知る必要があります-これを事前に計算するにはどうすればよいですか?ListViewはほとんど静的でかなり小さいので、リストに新しいアイテムを追加するときに再計算する必要がある場合でも問題ありません。

だから私の質問はこれです:ListViewとListアダプターが与えられた場合、リストの一番上から各アイテムの距離を計算するにはどうすればよいですか?つまり、アイテム0は上から0ピクセル、アイテム20は上から4032ピクセルになります。あるいは、私がやりたいことをするためのより良い方法はありますか?

4

2 に答える 2

1

アダプターで、リストと同じサイズの距離の 2 つ目のリストを保持します。コンストラクターで初期化します。次に、getView() 呼び出しごとに、ビューの高さをこの新しいリストの以前のインデックスに格納された値に追加できます。たとえば、あなたが持っているとしましょうList<Integer> distances。で呼び出すgetView(...)position = 0、設定されdistances.add(0 + view.getHeight());ます(ビューが初期化されたら)。位置 1 については、などを使用distance.add(distances.get(position-1) + view.getHeight);します。次に、特定のビュー インデックスの距離を取得するメソッドを用意します。このメソッドは、そのインデックスに格納されている値を返しますdistances

于 2012-10-28T18:54:36.653 に答える
1

メソッド getLeft() および getTop() を呼び出して、ビューの位置を取得することができます。前者は、ビューを表す四角形の左座標または X 座標を返します。後者は、ビューを表す四角形の上部 (Y) 座標を返します。これらのメソッドはどちらも、親を基準としたビューの位置を返します。たとえば、getLeft() が 20 を返す場合、それはビューがその直接の親の左端から 20 ピクセル右にあることを意味します。

さらに、不必要な計算を避けるために、getRight() と getBottom() といういくつかの便利なメソッドが提供されています。これらのメソッドは、ビューを表す四角形の右端と下端の座標を返します。たとえば、getRight() の呼び出しは、次の計算に似ています: getLeft() + getWidth() (幅の詳細については、サイズを参照してください。)

http://developer.android.com/reference/android/view/View.html

getItemAtPosition() を使用してビューを取得します

于 2012-10-28T18:52:29.293 に答える