首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在Android滚动视图中禁用时间滚动

在Android滚动视图中禁用时间滚动
EN

Stack Overflow用户
提问于 2019-01-10 06:57:01
回答 1查看 796关注 0票数 0

**我是初学者的惯用借口**

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

这工作得很好,我可以向上和向下滚动,web视图显示正确。

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

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

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

代码语言:javascript
运行
复制
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;
        };

    });

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

提前感谢:)

敬重基督徒

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-01-10 07:41:08

您可以按如下方式扩展ScrollView以禁用滚动

代码语言:javascript
运行
复制
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):

代码语言:javascript
运行
复制
<com.your.package.LockableScrollView 
    android:id="@+id/QuranGalleryScrollView" 
    android:layout_height="match_parent" 
    android:layout_width="match_parent">


</com.mypackagename.LockableScrollView>

启用/禁用滚动视图:

代码语言:javascript
运行
复制
LockableScrollView scv = (LockableScrollView)findViewById(R.id.QuranGalleryScrollView);
myWebView.setOnTouchListener(scv.unsuportedTouchListener);
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54119632

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档