【问题标题】:Temporal scrolling disabling in Android Scroll ViewAndroid Scroll View 中的时间滚动禁用
【发布时间】:2019-01-09 22:57:00
【问题描述】:

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

我在 Android Studio 中创建了一个带有垂直滚动视图的 Activity,并添加了几个项目,包括一个 webview。

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

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

现在,当我将手指移动到 webview 水平上方或下方时,没有任何反应,如果我将它们移动到 webview 顶部,地图会左右滚动,但不幸的是,每当我垂直移动手指时,滚动视图就会上下移动webview 保持在完全相同的垂直位置。

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

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;
        };

    });

添加此代码后,即使水平滚动也不可能了,但也许你可以帮我让它工作。

提前致谢:)

问候克里斯蒂安

【问题讨论】:

    标签: android webview scrollview


    【解决方案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);
    

    【讨论】:

    • 感谢您的快速支持,以我想要的方式完美运行 :)
    • 此解决方案不允许内部对象(如 RV)操作
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多