HorizontalScrollView со стрелками

Я пытаюсь сделать прокручиваемое горизонтальное меню, используя HorizontalScrollView, используя макет, показанный ниже. Меню прокручивается с помощью кнопок со стрелками влево / вправо или влево. Когда HorizontalScrollView достигнет одного конца, я хотел бы, чтобы стрелка на том же конце была скрыта (на изображении, показанном ниже, я хотел бы, чтобы левая стрелка была скрыта).

Как я могу обнаружить, что HorizontalScrollView достиг конца?

благодаря

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

<RelativeLayout android:background="@drawable/bg_home_menu" android:layout_width="fill_parent" android:layout_height="45dp"> <ImageView android:id="@+id/previous" android:src="@drawable/arrow_l" android:layout_height="14dp" android:layout_width="10dp" android:layout_alignParentLeft="true" android:layout_centerVertical="true" /> <ImageView android:id="@+id/next" android:src="@drawable/arrow_r" android:layout_height="14dp" android:layout_width="10dp" android:layout_alignParentRight="true" android:layout_centerVertical="true" /> <HorizontalScrollView android:id="@+id/horizontalScroll" android:layout_width="fill_parent" android:layout_height="fill_parent" android:scrollbars="none" android:fadingEdgeLength="30dp" android:layout_toLeftOf="@id/next" android:layout_toRightOf="@id/previous" > <LinearLayout android:id="@+id/home_menu" android:orientation="horizontal" android:layout_width="wrap_content" android:layout_height="fill_parent" android:gravity="center_vertical"> <Button android:id="@+id/btn_home" android:background="@drawable/btn_home_menu_on" android:layout_height="35dp" android:layout_width="wrap_content" android:focusable="true" android_clickable="false" android:text="@string/menu_home" android:textColor="#FFFFFF" android:tag="-1"/> <!-- More are added dynamically --> </LinearLayout> </HorizontalScrollView> </RelativeLayout> 

Используйте getScrollX () LinearLayout внутри вашего скроллера, чтобы определить, какой крайний левый угол на экране. Если это 0, то стрелка влево должна быть отключена.

Для стрелки вправо извлеките ширину прямоугольника чертежа , добавьте getScrollX () и сравните это с getMeasuredWidth () , если это то же самое, вы справа, не нужно стрелки вправо.

Таким образом, ваш код будет выглядеть так:

 if (homeMenu.getScrollX()==0) { hideLeftArrow(); } else { showLeftArrow(); } if (homeMenu.getDrawingRect().right == homeMenu.getMeasuredWidth()) { hideRightArrow(); } else { showRightArrow(); } 

Конечно, вам придется поместить это в прослушиватель событий. Я могу думать только о том, чтобы использовать собственный класс HorizontalScrollView, а метод onScroll () перезаписан для выполнения вышеперечисленных проверок, см. Этот пост .

Для HorizontalScrollView нет прослушивателя прокрутки. Что вы можете сделать, это добавить OnTouchListener к ней. Это будет срабатывать непрерывно, когда пользователь прокручивается, и каждый раз вы можете использовать метод getScrollX, который возвращает int.

Теперь 0 означает его левое большинство, чтобы найти самое большее (максимальное количество прокрутки), вам нужно найти ширину дочернего вида просмотра прокрутки horzontal. Это можно найти с помощью addOnGlobalLayoutListener иначе ширина всегда будет равна 0 внутри метода onCreate

Поместите этот код в метод onCreate

 final HorizontalScrollView hs = (HorizontalScrollView)findViewById(R.id.scroll); ViewTreeObserver vto = hs.getViewTreeObserver(); vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener() { @Override public void onGlobalLayout() { hs.getViewTreeObserver().removeGlobalOnLayoutListener(this); maxScrollX = hs.getChildAt(0) .getMeasuredWidth()-getWindowManager().getDefaultDisplay().getWidth(); } }); hs.setOnTouchListener(new OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { Log.e("ScrollValue", Integer.toString(hs.getScrollX())); if(hs.getScrollX() == maxScrollX){ Log.e("MaxRight", "MaxRight"); } return false; } }); 
Intereting Posts
Обработка объекта ответа Android Facebook API Разрешить пользователю выбирать камеру или галерею для изображения Как вы серым нажатием кнопки «Отправить», когда определенные поля EditText пусты? Является ли libgdx пригодным для игр 2d? Android отключает автоматическую прокрутку в расширенном виде списка Как обрабатывать множественные щелчки макета в recyclerView в Android Изображение пользователя android share from url RenderScript: использование ScriptGroup для процесса обработки изображений приводит к появлению горизонтальных полос Проблема с URI приложения для электронной почты Gmail для Android Android ExoPlayer поток через HTTP Kivy – Plyer – Android – отправка уведомления, пока приложение не запущено ViewPager of Fragment не показывает свое содержимое, когда корневой фрагмент заменяется снова Android: Как отправить сообщение программно с помощью приложения whats, We chat? DialogFragment с пользовательским ListView Как получить список выбранных элементов текста при нажатии кнопки AlertDialog