在Android滚动视图中禁用临时滚动

时间:2019-01-09 22:57:01

标签: android webview scrollview

*我是初学者的通常借口*

我在Android Studio中使用垂直滚动视图创建了一个活动,并添加了一些项目,包括Web视图。

这很好,我可以上下滚动并且网络视图正确显示。

我的问题是,只要我移动手指,Web视图中显示的对象就是一个地图(leaflet.js),它具有自己的水平和垂直滚动。

现在,当我将手指移动到Web视图水平上方或下方时,什么也不会发生,如果将它们移动到Web视图顶部,则地图会左右滚动,但是不幸的是,每当我垂直移动手指时,滚动视图就会上下移动Web视图保持在完全相同的垂直位置。

只要我的手指触摸地图,是否可以禁用滚动视图的垂直滚动?这是我无法使用的代码:

Bad receiver type 'CGFloat'(aka 'double')

添加此代码后,甚至无法进行水平滚动,但是也许您可以帮助我使其工作。

预先感谢:)

关于基督徒

1 个答案:

答案 0 :(得分:2)

您可以按以下方式扩展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);