Карта Huawei внутри Nested Scroll

Мне нужно перехватить Touch Event, поэтому я создал CustomSupportMapFragment, но так и не получил onTouchEvent, у меня есть тот же код для версии GMS, и все работает нормально. Так что я не знаю. Вот мой код:

class TCSupportMapFragment: SupportMapFragment() {
    private var mListener: OnTouchListener? = null

    override fun onCreateView(inflater: LayoutInflater, parent: ViewGroup?, savedInstanceState: Bundle?): View {
        val layout = super.onCreateView(inflater, parent, savedInstanceState)

        val frameLayout = TouchableWrapper(requireContext())
        frameLayout.setBackgroundColor(ContextCompat.getColor(requireContext(), R.color.transparent))
        (layout as ViewGroup).addView(frameLayout, ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT))
        return layout
    }

    fun setListener(listener: OnTouchListener?) {
        mListener = listener
    }

    interface OnTouchListener {
        fun onTouch()
    }

    inner class TouchableWrapper(context: Context) : FrameLayout(context) {
        override fun dispatchTouchEvent(event: MotionEvent): Boolean {
            when (event.action) {
                MotionEvent.ACTION_DOWN -> mListener?.onTouch()
                MotionEvent.ACTION_UP -> mListener?.onTouch()
            }
            return super.dispatchTouchEvent(event)
        }
    }
}

В действии:

override fun onTouchListener() {
        this.binding.nestedScroll.requestDisallowInterceptTouchEvent(true)
    }

person BraveQueen05    schedule 16.02.2021    source источник


Ответы (1)


Вы должны перехватывать касание там, где вы выполняете логику, вместо того, чтобы создавать новый тип фрагмента, используя следующее:

View view = inflater.inflate(R.layout.fragment_test, container, false);

    view.setOnTouchListener(new View.OnTouchListener() {
            public boolean onTouch(View v, MotionEvent event) {

                if(event.getAction() == MotionEvent.ACTION_MOVE){
                    //do something
                }
                return true;
            }
    });

//here the rest of your codereturn view;

Вы также можете обратиться к некоторым похожим темам здесь.

person Zinna    schedule 17.02.2021