2011-08-02 16 views
1

私はGalleryを持っていて、画面に表示されているアイテムの数を知りたいと思っています。各アイテムはフルスクリーンを使用するので、私は本当に2つのアイテムがミッドスクロールの結果として表示されることを知ることに興味があります。ありがとう。ギャラリーに表示されるビューの数を取得するにはどうすればよいですか?

+0

これが可能かどうかわかりません - 聞いたことがありません – Jack

答えて

0

ここに行くよ!あなたGalleryあなたがあなたのギャラリーに表示された各ビューへのアクセス権を持っているがあり

protected boolean getChildStaticTransformation(View child, Transformation t) {} 

へのアクセスを取得します拡張します。 これからは2つのことができます。

  1. カウントすべてユニークチャイルズは(getChildStaticTransformationが必要であるユニークでお子様のチェックだ、なぜタッチイベントなどに例えば複数回呼び出すことができます)。 このメソッドは、ギャラリーによって設定された子を返します。ギャラリーでパフォーマンスの問題が発生した場合は、トップ1とボトム+1の子が表示されます。ときどき+2 -2または+ n -n(子供の幅に依存し、原因は水平スクロールウィジェットです)。そうすれば、あなたが必要としているものではないかもしれないが、ギャラリーに表示された子供たちが常に正確であるとは限りません。
  2. .getLeftと.getRightがギャラリー境界内にあるかどうかをチェックします。子のgetLeftがギャラリー内にあり、別の子のgetRightもギャラリー内にある場合でも、スクロール中です。 これはあなたが必要とするものです。
  3. あなたは子供(表示時に1つだけ)にfill_parentているなら、あなたは、ギャラリーはflinging.Thenをスクロールしている場合は、ギャラリー「打ち上げ」setOnItemSelectedListener(まで半ばスクロールである見ることができます) 。これを行うには、setCallbackDuringFling(true)を設定する必要があります。
+0

あなたの答えは正しい方向に進みます。私は1つのビューしか見ることができないので、2つ目は 'getChildCount()'を使うことができます.2の場合はスクロールします。そうでなければ1です。 –

+0

メソッド#2については、何度も呼び出されていると思います。チェックすると、目に見えるアイテムカウンタが負になります。チェックが正しくない可能性があります:boolean isVisible = right> = 0 && right = 0 && left

0

私は考えることができる最善のは、このようなあなたのギャラリーにAnimationListenerを設定することです:

gallery.setLayoutAnimationListener(new AnimationListener() { 

    @Override 
    public void onAnimationStart(Animation animation) { 
     //schedule timer to execute halfway through animation here 

    } 

    @Override 
    public void onAnimationRepeat(Animation animation) { 
     // TODO Auto-generated method stub 

    } 

    @Override 
    public void onAnimationEnd(Animation animation) { 
     // TODO Auto-generated method stub 

    } 
}); 

とgallery.setAnimationDuration(たdurationInMilliseconds)でアニメーションの再生時間を設定します。

アニメーションがいつ始まり、どれくらいの時間がかかるかを知っています。その情報を使用すると、アニメーションの途中でコードを実行するタイマーをスケジュールすることができます。これは、ギャラリーに同時に2つのビューが表示されるときに行う必要があります。

これは非常に難しい方法ですが、他の人にもっと良い提案をする時間を与えてください。

関連する問題