Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/213.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 检查可拖动的ImageView是否覆盖任何可见的RecyclerView元素_Android_Android Layout_Android Recyclerview_Ontouchlistener - Fatal编程技术网

Android 检查可拖动的ImageView是否覆盖任何可见的RecyclerView元素

Android 检查可拖动的ImageView是否覆盖任何可见的RecyclerView元素,android,android-layout,android-recyclerview,ontouchlistener,Android,Android Layout,Android Recyclerview,Ontouchlistener,大家好,我的社区 我是一个业余程序员,需要一些关于我想要实现的功能的指导 我的Android应用程序目前包含一个RecyclerView,我使用适配器从数据源填充它。我分配了一个水平线性布局管理器,使其覆盖整个屏幕 在OnCreate()中: 我试图实现以下内容: 在释放ImageView并恢复到原始ImageView位置之前,我想检查ImageView是否覆盖了屏幕上任何可见的RecyclerView元素 通过谷歌搜索和浏览stackoverflow,我提出了以下实施策略: 在用户开始拖动Im

大家好,我的社区

我是一个业余程序员,需要一些关于我想要实现的功能的指导

我的Android应用程序目前包含一个RecyclerView,我使用适配器从数据源填充它。我分配了一个水平线性布局管理器,使其覆盖整个屏幕

在OnCreate()中:

我试图实现以下内容:

在释放ImageView并恢复到原始ImageView位置之前,我想检查ImageView是否覆盖了屏幕上任何可见的RecyclerView元素

通过谷歌搜索和浏览stackoverflow,我提出了以下实施策略:

在用户开始拖动ImageView之前:

  • 使用
    findFirstCompletelyVisibleItemPosition()
    findLastCompletelyVisibleItemPosition()
当用户释放ImageView时,在ImageView捕捉回其原始位置之前:

  • 循环浏览所有可见的RecyclerView元素,并访问屏幕上的元素“位置”
  • 使用可见元素的视图大小信息绘制
    Rect
    对象,以及在屏幕上当前位置为用户ImageView绘制对象
  • 循环查看可见的RecyclerView
    Rect
    对象,并检查其中是否有任何对象与用户图像视图
    Rect
如果您对这种方法有任何反馈,我们将不胜感激。虽然对我来说这听起来合乎逻辑,但我正在努力实现它——首先也是最重要的是如何在我的OnTouchListener中使用RecyclerView。如何将当前的RecyclerView布局(用户单击ImageView时屏幕上的布局,因为当用户拖动ImageView时,RecyclerView不会更改)获取到我的OnTouchListener中

提前谢谢

// 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
}