Отключение временной прокрутки в Android Scroll View

* обычное оправдание, что я новичок *

Я создал Activity в Android Studio с вертикальной прокруткой и добавил к нему несколько элементов, включая веб-просмотр.

Это работает нормально, я могу прокручивать вверх и вниз, и веб-представление отображается правильно.

Моя проблема в том, что объект, отображаемый в веб-просмотре, представляет собой карту (leaflet.js), имеющую собственную горизонтальную и вертикальную прокрутку, как только я двигаю пальцем.

Теперь, когда я перемещаю палец выше или ниже горизонтали веб-просмотра, ничего не происходит, и если я перемещаю их поверх веб-просмотра, карта прокручивается влево и вправо, но, к сожалению, всякий раз, когда я перемещаю палец по вертикали, вид прокрутки перемещается вверх и вниз, а веб-просмотр остается точно в таком же вертикальном положении.

Можно ли отключить вертикальную прокрутку прокрутки, пока мой палец касается карты? Это мой не рабочий код:

ScrollView scv = (ScrollView) findViewById(R.id.scrollview);
    myWebView.setOnTouchListener(new View.OnTouchListener() {

        public boolean onTouch(View v, MotionEvent event) {

            if (event.getAction() == MotionEvent.ACTION_DOWN){
                scv.setVerticalScrollBarEnabled(false);
            }else if (event.getAction() == MotionEvent.ACTION_UP){
                scv.setVerticalScrollBarEnabled(true);

            }
            return true;
        };

    });

После добавления этого кода даже горизонтальная прокрутка больше не возможна, но, возможно, вы поможете мне заставить его работать.

Заранее спасибо :)

С уважением, Кристиан

0
0
814
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете расширить ScrollView следующим образом, чтобы отключить прокрутку

class LockableScrollView extends ScrollView {

   // true if we can scroll (not locked)
   // false if we cannot scroll (locked)
   private boolean mScrollable = true;

   public View.OnTouchListener unsuportedTouchListener = new View.OnTouchListener() {
       public boolean onTouch(View v, MotionEvent event) {
           if (event.getAction() == MotionEvent.ACTION_DOWN){
               mScrollable = false;
           }else if (event.getAction() == MotionEvent.ACTION_UP){
               mScrollable = true;
           }
           return false;
       }
    }

   @Override
   public boolean onTouchEvent(MotionEvent ev) {
       if (ev.getAction() == MotionEvent.ACTION_DOWN){
               // if we can scroll pass the event to the superclass
               return mScrollable && super.onTouchEvent(ev);
       }else{
               return super.onTouchEvent(ev);
       }
   }

   @Override
   public boolean onInterceptTouchEvent(MotionEvent ev) {
       // Don't do anything with intercepted touch events if
       // we are not scrollable
       return mScrollable && super.onInterceptTouchEvent(ev);
   }

}

в вашем XML-файле (просто изменил ScrollView на ваш специальный LockableScrollView):

<com.your.package.LockableScrollView 
    android:id = "@+id/QuranGalleryScrollView" 
    android:layout_height = "match_parent" 
    android:layout_width = "match_parent">


</com.mypackagename.LockableScrollView>

включение / отключение режима прокрутки:

LockableScrollView scv = (LockableScrollView)findViewById(R.id.QuranGalleryScrollView);
myWebView.setOnTouchListener(scv.unsuportedTouchListener);

Спасибо за быструю поддержку, все сработало так, как я хотел :)

Christian Buchwald 10.01.2019 17:21

это решение не позволяет внутренним объектам (например, RV) работать

Guy 28.12.2019 00:05

Другие вопросы по теме