次のような独自の複合ウィジェットを作成しました。
<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 がそのタップ遅延のために内部で何らかのタッチ処理を行っているのかはわかりません。
ありがとう