如何检查视图是否包含当前指针位置? OnTouch 覆盖,在按钮上滑动

问题描述

我正在制作一个应用程序,其中有一组图像按钮,每个按钮都有一个特定的声音(使用 SoundPool)。我正在覆盖 onTouch 功能以在按下按钮时播放声音而不是点击(到目前为止它工作正常),但我也希望能够 1)支持多点触控,2)在滑动时激活声音按钮,因此如果指针位于按钮上,则按钮被激活,当指针不再位于按钮上时,按钮返回其正常状态。我认为这个概念应该是这样的:我正在检查事件动作是 ACTION_DOWN 还是 ACTION_MOVE 如果是,然后我遍历指针,获取其当前位置并搜索按钮(当前布局中的按钮数组),如果有的话包含那个点。听起来不错,但不起作用。我对 Android 开发完全陌生,但期待看到您的建议。

override fun onTouch(v: View?,event: MotionEvent?): Boolean {
    if(event?.action == MotionEvent.ACTION_DOWN || event?.action == MotionEvent.ACTION_MOVE){
        for (touchIndex in 0..(event.pointerCount - 1)) {
            var x: Float = event.getX(touchIndex)
            var y: Float = event.getY(touchIndex)
            for (key_id in activity_main_keys){
                var button = findViewById<ImageButton>(key_id)
                var rect = Rect(0,0)
                button?.getGlobalVisibleRect(rect)
                var isContainedInView = rect.contains( x.toInt(),y.toInt())
                if(isContainedInView){
                    when(key_id){
                        R.id.c_two -> {
                                sndPool?.play(c5,2F,1F)
                                button.setpressed(true)
                        }
                        R.id.cis_two -> {
                                sndPool?.play(cis5,1F)
                                button.setpressed(true)
                        }
                    }
                }
            }
        }
    }else if (event?.action == MotionEvent.ACTION_UP) {
        for(key_id in activity_main_keys){
                when (key_id) {

                    R.id.c_two -> v.setpressed(false)
                    R.id.cis_two -> v.setpressed(false)
                    
                }
        }
    }
}

它也不适用于仅检查一个指针 (pointerIndex = 0),但在仅检查具有 ACTION_DOWN 的视图时它工作正常。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)