Android 检查可拖动的ImageView是否覆盖任何可见的RecyclerView元素
大家好,我的社区 我是一个业余程序员,需要一些关于我想要实现的功能的指导 我的Android应用程序目前包含一个RecyclerView,我使用适配器从数据源填充它。我分配了一个水平线性布局管理器,使其覆盖整个屏幕 在OnCreate()中: 我试图实现以下内容: 在释放ImageView并恢复到原始ImageView位置之前,我想检查ImageView是否覆盖了屏幕上任何可见的RecyclerView元素 通过谷歌搜索和浏览stackoverflow,我提出了以下实施策略: 在用户开始拖动ImageView之前:Android 检查可拖动的ImageView是否覆盖任何可见的RecyclerView元素,android,android-layout,android-recyclerview,ontouchlistener,Android,Android Layout,Android Recyclerview,Ontouchlistener,大家好,我的社区 我是一个业余程序员,需要一些关于我想要实现的功能的指导 我的Android应用程序目前包含一个RecyclerView,我使用适配器从数据源填充它。我分配了一个水平线性布局管理器,使其覆盖整个屏幕 在OnCreate()中: 我试图实现以下内容: 在释放ImageView并恢复到原始ImageView位置之前,我想检查ImageView是否覆盖了屏幕上任何可见的RecyclerView元素 通过谷歌搜索和浏览stackoverflow,我提出了以下实施策略: 在用户开始拖动Im
- 使用
和findFirstCompletelyVisibleItemPosition()
findLastCompletelyVisibleItemPosition()
- 循环浏览所有可见的RecyclerView元素,并访问屏幕上的元素“位置”
- 使用可见元素的视图大小信息绘制
对象,以及在屏幕上当前位置为用户ImageView绘制对象Rect
- 循环查看可见的RecyclerView
对象,并检查其中是否有任何对象与用户图像视图Rect
Rect
// load all currently active user profiles and populate RecyclerView
val myActiveContactProfiles = Datasource().loadActiveContactProfiles()
val recyclerViewActive = findViewById<RecyclerView>(R.id.recycler_view_active)
recyclerViewActive.layoutManager =
LinearLayoutManager(this, LinearLayoutManager.HORIZONTAL, false)
recyclerViewActive.adapter = ItemAdapter(this, myActiveContactProfiles)
recyclerViewActive.setHasFixedSize(false)
override fun onTouch(view: View, motionEvent: MotionEvent): Boolean {
when (motionEvent.action) {
MotionEvent.ACTION_DOWN -> {
// no action needed
}
MotionEvent.ACTION_MOVE -> {
// change position as user drags it
view.x = motionEvent.rawX - view.width / 2
view.y = motionEvent.rawY - view.height / 2
}
MotionEvent.ACTION_UP -> {
// when released, snap back to original position
SpringAnimation(view, DynamicAnimation.TRANSLATION_X, 0f).apply {
spring.stiffness = SpringForce.STIFFNESS_MEDIUM
spring.dampingRatio = SpringForce.DAMPING_RATIO_MEDIUM_BOUNCY
start()
}
SpringAnimation(view, DynamicAnimation.TRANSLATION_Y, 0f).apply {
spring.stiffness = SpringForce.STIFFNESS_MEDIUM
spring.dampingRatio = SpringForce.DAMPING_RATIO_MEDIUM_BOUNCY
start()
}
}
}
return true
}