我有一个图像视图,上面有一个复选框,类似于多选图像库中的内容。
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools">
<data>
<variable
name="entity"
type="a.l.s.v.entity.Image" />
<variable
name="viewModel"
type="a.l.s.v.image.ImageViewModel" />
</data>
<androidx.constraintlayout.widget.ConstraintLayout>
<ImageView
android:id="@+id/image"
...
app:loadImage="@{entity.uri}"/>
<CheckBox
android:id="@+id/imageCheckbox"
...
app:visibleIf="@{viewModel.showCheckbox}"
app:depressViewOnSelect="what goes here?"/> <!-- Can we pass views here? -->
</androidx.constraintlayout.widget.ConstraintLayout>
</layout>
目标:当长按作为 UX 确认的一种方式时,我试图压低图像(添加一些视图填充)。
问题:我想到的一个想法是通过适配器对复选框进行数据绑定,app:depressViewOnSelect
然后ImageView
从上面的布局中传入。我不明白的是,如果我要传入view
参数,我应该用 XML 写什么?数据绑定完全有可能吗?
@JvmStatic
@BindingAdapter("app:depressViewOnSelect")
fun depressViewOnSelect(checkbox: CheckBox, view: View) {
checkbox.setOnCheckedChangeListener { _, isChecked ->
if(isChecked)
view.setPadding(dpToPx(view.context, padding))
else
view.setPadding(0)
}
}
编辑:目前我已经在onLongClick()
my 的方法中添加了监听器RecyclerView.ViewHolder
,它实现了OnLongClickListener
. 当长按仅发生在单个视图持有者上时,在为图像实现拖动选择时,该方法的问题就出现了,这意味着侦听器未安装在其他视图持有者上。
我添加了一个view
变量以从布局访问它并将其绑定为binding.view = imageView
在ViewHolder
实现中。
<data>
<variable
name="entity"
type="app.lanet.sails.home.image.model.Image" />
<variable
name="view"
type="android.widget.ImageView" />
<variable
name="counter"
type="app.lanet.sails.home.common.media.selection.SelectionCounter" />
</data>
最后,将视图作为app:depressViewOnSelect="@{view}"
XML 中的任何其他数据绑定参数传递。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句