課題
Viewに android:foreground="?android:attr/selectableItemBackground"
を定義しているが、プログラム上から呼び出して使用したい。
対応
RippleDrawableのstateを変更することでエフェクトが発生するのでstateを変更してあげれば良い。 以下のサンプルはview.foregroundに RippleDrawableが定義されていることを前提としている
if (Build.VERSION.SDK_INT >= 23 && view.foreground isRippleDrawable) { val rippleDrawable: RippleDrawable = view.foreground as RippleDrawable rippleDrawable.state = arrayOf( android.R.attr.state_pressed, android.R.attr.state_enabled ).toIntArray() holder.itemView.postDelayed({ rippleDrawable.state = IntArray(0) }, 200) }
ダブルタップ対応でonClickListenerではなくonTouchListenerを使おうとしたときに必要になった。
view.backgroundの場合はSDK_INTは21以上から対応しているかと。