如何通过 Kotlin 将拖动视图的 ID 传递给 setImageResource(resID:Int)?
How can I pass the ID of dragged view into setImageResource(resID:Int) via Kotlin?
我想将一张图片移动到另一张空图片中。执行此操作时应删除拖动的图片,放置目标应复制拖动图片包含的数据。
val myOnDragListener = View.OnDragListener { v, event ->
val draggedView = event.localState as ImageView
if(event.action == DragEvent.ACTION_DROP){
(v as ImageView).setImageResource(draggedView.id)
draggedView.setImageDrawable(null)
}
true
}
我可以使用 localState
将拖动的数据复制到 draggedView
中。之后,当发生放置事件时,它应该更改放置目标的图像资源,但事实并非如此。这是程序崩溃的地方。
setImageResource
说它需要一个 Int 参数,但据我所知它只接受 setImageResource(R.drawable.name)
语法。
如何将拖动视图的 ID 传递给 setImageResource(resID:Int)
?
首先尝试使用资源 ID
设置标签
val myImageView = findViewById<ImageView>(R.id.my_imageView);
myImageView.setImageResource(R.drawable.drawable_name)
myImageView.setTag(R.drawable.drawable_name);
然后就可以拿到标签了
val myOnDragListener = View.OnDragListener { v, event ->
val draggedView = event.localState as ImageView
val tag=draggedView.tag as Int
if(event.action == DragEvent.ACTION_DROP){
(v as ImageView).setImageResource(tag)
draggedView.setImageDrawable(null)
}
true
}
我想将一张图片移动到另一张空图片中。执行此操作时应删除拖动的图片,放置目标应复制拖动图片包含的数据。
val myOnDragListener = View.OnDragListener { v, event ->
val draggedView = event.localState as ImageView
if(event.action == DragEvent.ACTION_DROP){
(v as ImageView).setImageResource(draggedView.id)
draggedView.setImageDrawable(null)
}
true
}
我可以使用 localState
将拖动的数据复制到 draggedView
中。之后,当发生放置事件时,它应该更改放置目标的图像资源,但事实并非如此。这是程序崩溃的地方。
setImageResource
说它需要一个 Int 参数,但据我所知它只接受 setImageResource(R.drawable.name)
语法。
如何将拖动视图的 ID 传递给 setImageResource(resID:Int)
?
首先尝试使用资源 ID
设置标签val myImageView = findViewById<ImageView>(R.id.my_imageView);
myImageView.setImageResource(R.drawable.drawable_name)
myImageView.setTag(R.drawable.drawable_name);
然后就可以拿到标签了
val myOnDragListener = View.OnDragListener { v, event ->
val draggedView = event.localState as ImageView
val tag=draggedView.tag as Int
if(event.action == DragEvent.ACTION_DROP){
(v as ImageView).setImageResource(tag)
draggedView.setImageDrawable(null)
}
true
}