0

次のような独自の複合ウィジェットを作成しました。

<LinearLayout>
  <TextView />
  <Button />
</LinearLayout>

これらのうち15個をScrollViewに入れています。ListView と同じように動作させたい (このタスクに ListView を直接使用することはできません)。

押されたときに強調表示する各ウィジェットが必要です。私はこれを機能させましたが、敏感すぎます-指がレイアウトに当たるとすぐに強調表示されます-実際のタップと単なるスクロールジェスチャを区別するために、強調表示する前に遅延が必要です.

たとえば、ListView では、指をドラッグしてスクロールすると、行に指を 1 秒間置いたままにしない限り、行の項目が強調表示されません。

これは、各複合アイテムの背景を設定した方法です。

private void setBg() {
  ColorDrawable blr = new ColorDrawable(0xFFFFFFFF);
  Drawable pressed = getContext().getResources().getDrawable(android.R.drawable.list_selector_background);

  StateListDrawable bg = new StateListDrawable();
  bg.addState(View.PRESSED_ENABLED_STATE_SET, pressed);
  bg.addState(View.FOCUSED_SELECTED_WINDOW_FOCUSED_STATE_SET, pressed);
  bg.addState(View.PRESSED_ENABLED_FOCUSED_STATE_SET, pressed);
  bg.addState(View.ENABLED_WINDOW_FOCUSED_STATE_SET, pressed);
  bg.addState(View.ENABLED_STATE_SET, blr);
  bg.addState(View.SELECTED_WINDOW_FOCUSED_STATE_SET, blr);

  setBackgroundDrawable(bg);
}

したがって、上記のバックグラウンド ドローアブル状態のいずれかを誤って設定しただけなのか、それとも ListView がそのタップ遅延のために内部で何らかのタッチ処理を行っているのかはわかりません。

ありがとう

4

2 に答える 2

0

Google IO 2009 での Romain Guy のプレゼンテーションは、同様の状況で役に立ちました。

Android UI を高速かつ効率的 にする (約 90 秒)

言及された ViewHolder トリックは、パフォーマンスを大幅に向上させることができます。

また、画像がキャッシュから読み込まれている間に一時的な Drawable を表示すると、画像がまだ読み込まれていない場合でも高速にスクロールできます。その後、アニメーションを使用して、(たとえば) キャッシュから返されたときに画像をフェードインできます。

これは、Android マーケットなどのアプリで採用されているアプローチのようです。

于 2009-12-08T22:18:42.243 に答える
0

アニメーションまたはトランジションを使用して、タッチダウン時にアニメーションまたはトランジションを実行し、タッチアップまたはキャンセル時に停止またはリセットしてみてください。リストの最初のフレーム/アイテムに遅延を置きます。

http://developer.android.com/guide/topics/graphics/2d-graphics.html#frame-animation

于 2009-11-27T23:23:11.443 に答える