Карта ESRI во вложенном представлении прокрутки - PullRequest
0 голосов
/ 19 декабря 2018

Я пытаюсь добавить карту ESRI к моему фрагменту, который находится в NestedScrollView.Он загружается нормально, но когда я перемещаю карту, она не двигается плавно, если я удаляю NestedScrollView, все работает нормально.

Вот мой вид карты ESRI внутри NestedScrollView

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/linearLayout"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <androidx.core.widget.NestedScrollView
        android:id="@+id/nestedScrollView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_margin="@dimen/spacing_normal">

    <com.esri.arcgisruntime.mapping.view.MapView
            android:id="@+id/mapView"
            android:layout_width="match_parent"
            android:layout_height="match_parent">

     </com.esri.arcgisruntime.mapping.view.MapView>

 </androidx.core.widget.NestedScrollView>
</LinearLayout>

Я попытался установитьcustomTouchListener для отображения карты по ссылке из здесь как:

MyTouchListener tl = new MyTouchListener(this, mMapView);   
mMapView.setOnTouchListener(tl);

MyTouchListener class:

class MyTouchListener(context: Context, m: MapView) : DefaultMapViewOnTouchListener(context, m) {

    private var sv: NestedScrollView? = null

    override fun onTouch(v: View?, event: MotionEvent): Boolean {
        v?.performClick()
        sv = v!!.findViewById(R.id.nestedScrollView)
        val action = event.action
        when (action) {
            MotionEvent.ACTION_DOWN ->
                // will disable the scrollview from being able to
                // intercept the touch events for the mapview
                sv?.requestDisallowInterceptTouchEvent(true)

            MotionEvent.ACTION_UP ->
                // gives control back over to the scrollview
                sv?.requestDisallowInterceptTouchEvent(false)
        }

        super.onTouch(v, event)
        return true
    }

}

Но все же проблема не в том, что карта движется плавно.

1 Ответ

0 голосов
/ 26 декабря 2018

Это отключит scrollView от возможности перехвата сенсорных событий для mapView

override fun onTouch(view: View?, event: MotionEvent?): Boolean {
    activity?.nestedScrollView?.requestDisallowInterceptTouchEvent(true)
    return super.onTouch(view, event)
}

Также сделайте это в addViewpointChangedListener

mapView.addViewpointChangedListener {
    activity?.nestedScrollView?.requestDisallowInterceptTouchEvent(true)
}
...