Как заставить горизонтальную прокрутку внутри горизонтальной прокрутки работать?

Я искал похожие вопросы и пробовал несколько ответов, не решая. У меня есть Horizontal Recycler View, отображающий названия городов и некоторые данные, проблема в том, что я помещаю гистограмму холста или диаграмму RV, как показано ниже, внутри адаптера Main Recycler View в каждой позиции и для прокрутите эту диаграмму по горизонтали. Я поместил диаграмму в режим горизонтальной прокрутки, чтобы увидеть данные диаграммы в длинном горизонтальном направлении, прокручивая эту диаграмму справа налево и наоборот, но на самом деле она не прокручивается только по горизонтали. прикоснитесь к нему, и для этой диаграммы внутри RV не прокручивается, когда прикасаетесь к ней для прокрутки (замораживания), является ли просмотр переработчика только прокруткой по горизонтали и предотвращением любой другой прокрутки внутри его дочернего элемента ??

введите здесь описание изображения

вот мой макет элемента представления ресайклера

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content">

<androidx.core.widget.NestedScrollView
    android:id="@+id/scv"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fillViewport="true"
    android:scrollbars="none">
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical"

        android:padding="10dp">
    <androidx.cardview.widget.CardView
        android:id="@+id/main_cardView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:cardCornerRadius="12dp"
        app:cardBackgroundColor="@android:color/transparent">


        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical"
            android:id="@+id/linearLayoutWeather"
            android:layout_centerVertical="true"
            android:layout_centerHorizontal="true"
            android:padding="10dp">

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:id="@+id/txtCityName2"
                android:textColor="@color/text_light"
                android:textSize="42sp"
                android:textStyle="bold"
                android:layout_gravity="center_horizontal"
                android:gravity="center_horizontal"/>

            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:orientation="horizontal"
                android:layout_gravity="center_horizontal"
                android:gravity="center_horizontal"
                android:paddingTop="10dp">

                <ImageView
                    android:layout_width="120dp"
                    android:layout_height="120dp"
                    android:id="@+id/imgWeather2"
                    android:src="@mipmap/ic_launcher"/>

                <TextView
                    android:paddingLeft="10dp"
                    android:id="@+id/txtCityTemperature2"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="30 C"
                    android:textColor="@color/text_light"
                    android:textSize="24sp"
                    android:textStyle="bold"
                    android:paddingTop="45dp"/>

            </LinearLayout>

            
        </LinearLayout>
    </androidx.cardview.widget.CardView>


        <RelativeLayout

            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:gravity="center">

            <HorizontalScrollView             // here is the problem (doesn't scroll)

                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_alignParentStart="true"
                android:layout_alignParentEnd="true"
                android:layout_marginStart="0dp"
                android:layout_marginEnd="0dp"
                android:scrollbars="horizontal">


                <WeatherChartViewBars2
                    android:id="@+id/bars"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:isScrollContainer="true"

                    />
            </HorizontalScrollView>

        </RelativeLayout>


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

Я попытался заставить диспетчер компоновки Recycler View прокручиваться вертикально, а горизонтальная диаграмма успешно прокручивается по горизонтали, но когда сделать RV Horizontal, диаграмма зависает без прокрутки, хотя она находится внутри горизонтальной прокрутки.

вот мой фургон

  recyclerViewWeather.setLayoutManager(new LinearLayoutManager(this, RecyclerView.HORIZONTAL, 
  false));
    adapter = new WeatherAdapter(this, cityList, dataManager);
   recyclerViewWeather.setHasFixedSize(true);
    recyclerViewWeather.setAdapter(adapter);

   recyclerViewWeather.addOnScrollListener(new RecyclerView.OnScrollListener() {
        @Override
        public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
            super.onScrollStateChanged(recyclerView, newState);
            if (newState == RecyclerView.SCROLL_STATE_IDLE){
               position = getCurrentItem();
               

                try {
                    UpdateDailyWeather();
                } catch (JSONException e) {
                    e.printStackTrace();
                }

            }
        }
    });
    PagerSnapHelper snapHelper = new PagerSnapHelper();
    snapHelper.attachToRecyclerView(recyclerViewWeather);

person Wael Youssef    schedule 10.03.2021    source источник


Ответы (2)


Оберните свои WeatherChartViewBars в Horizontal LinearLayout внутри HorizontalScrollView. Это сработает.

person Brendon    schedule 30.05.2021
comment
спасибо .. это не работает на эмуляторе, но я попробовал на реальном устройстве, оно работает очень медленно и останавливает перемещение гистограммы по горизонтали. Я имею в виду замораживание гистограммы и горизонтальную прокрутку просмотра переработчика города, поэтому гистограмма результатов прокручивается очень медленно или зависает при попытке прокрутить ее по горизонтали, и если я делаю RV вертикальным, он работает хорошо, горизонтальная полоса прокрутки - person Wael Youssef; 31.05.2021
comment
так ваша проблема решилась тогда? - person Brendon; 31.05.2021
comment
Еще нет, я думаю, чтобы сделать просмотр ресайклера Linear Layout Manager HORIZONTAL, чтобы предотвратить горизонтальную прокрутку внутри него, даже если я поместил эту гистограмму в Horizontal Scroll View, основной RV прокручивается только по горизонтали и замораживает прокрутку любого дочернего элемента внутри него. - person Wael Youssef; 31.05.2021
comment
есть ли там, когда сенсорная гистограмма блокирует представление переработчика от прокрутки по горизонтали и разрешает только прокрутку гистограммы, а после завершения разрешает прокрутку RV - person Wael Youssef; 31.05.2021
comment
Попробуйте этот stackoverflow.com/questions/59973757/ - person Brendon; 31.05.2021
comment
Я думаю, что это близко к тому, что я хочу, но решение кажется неправильным или неясным, может быть, я должен остановить прокрутку родительского recyclerview при касании дочерних элементов recyclerview, но я не знаю, как реализовать - person Wael Youssef; 04.06.2021
comment
Большое спасибо, это помогло и исправило прокрутку горизонтальной прокрутки в представлении Horizontal Recycler. - person Wael Youssef; 05.06.2021

@Brendon поставил меня на правильный путь, так как я должен прекратить прокрутку в представлении Horizontal Recycler, касаясь элементов представления горизонтальной прокрутки, таких как гистограмма, ключ является getparent представления горизонтальной прокрутки. Также я сделал это для каждого элемента в держателе вида адаптера, который хочет прокручивать его по горизонтали.

    holder.horizontalScrollView.setOnTouchListener(new 
        View.OnTouchListener() {

        @Override
        public boolean onTouch(View v, MotionEvent event) {
            
     holder.horizontalScrollView.getParent().
      requestDisallowInterceptTouchEvent(true);


            return false;
        }
    });
person Wael Youssef    schedule 05.06.2021