Отключение временной прокрутки в Android Scroll View - PullRequest
0 голосов
/ 10 января 2019

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

Я создал 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;
        };

    });

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

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

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

1 Ответ

0 голосов
/ 10 января 2019

Вы можете расширить 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);
...