ドキュメントには記載されていませんが、クリック リスナーとロングクリック リスナーの両方が SeekBars でサポートされていないことを実験的に判断しました。それらは ProgressBars でサポートされています。
ソース コードを掘り下げると、その理由がわかりSeekBar.onTouchEvent()
ますsuper.onTouchEvent()
。その中にView.onTouchEvent()
ありperformClick()
、performLongClick()
必要に応じて呼ばれます。したがって、上でのロングクリックを処理する唯一の方法SeekBar
は、手動で検出することです。
私自身の考えでは、 a のロングクリック ハンドラーを持つSeekBar
ことは実際には意味がありません。ユーザーがロングクリックのしきい値/遅延よりも長く「親指」をドラッグしている場合、突然、おそらく意図されていない長押しが発生します。親指を動かすたびに遅延をキャンセルしてリセットできます。正確に 1 つの位置で数秒間長押しする必要があります。しかし、完全に静止していることはめったにありません。実際、親指を数秒間動かさずに保持することは困難です。したがって、遅延をリセットする親指の位置の変更を最小限に抑えることができます。やむを得ない場合はそうしますが、非常に奇妙なユーザー エクスペリエンスだと言わざるを得ません。Android には、長押しが重要であるとユーザーが期待する場所がたくさんありますが、SeekBar
そうではありません。