如何禁用 Horizo​​ntalScrollView

How to disable HorizontalScrollView

我正在编写自定义 ChipGroup class,在布局中我有一个 Horizo​​ntalScrollView 和一个 Material ChipGroup。在我的构造函数中,我传递了一个名为 "isScrollable" 的布尔值,因为我希望它可以在滚动时进行配置。

如果滚动配置为 false,是否有办法使 Horizo​​ntalScrollView 的滚动失效?

  1. 您不能禁用 ScrollView 的滚动。你需要 扩展到 ScrollView 并将 onTouchEvent 方法覆盖到 return 当某些条件匹配时为 false。
  2. Gallery 组件滚动 水平地不管它是否在 ScrollView 中 - a ScrollView 只提供垂直滚动(你需要一个 Horizo​​ntalScrollView 用于水平滚动)。
  3. 你好像说你 图像拉伸本身有问题——这什么都没有 要处理 ScrollView,您可以更改 ImageView 的缩放方式 使用 android:scaleType 属性 (XML) 或 setScaleType 方法 例如 ScaleType.CENTER 不会拉伸您的图像,而是将其以原始大小居中。

您可以按如下方式修改 ScrollView 以禁用滚动:

  class LockableScrollView extends ScrollView {   

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

    public void setScrollingEnabled(boolean enabled) {
        mScrollable = enabled;
    }

    public boolean isScrollable() {
        return mScrollable;
    }

    @Override
    public boolean onTouchEvent(MotionEvent ev) {
        switch (ev.getAction()) {
            case MotionEvent.ACTION_DOWN:
                // if we can scroll pass the event to the superclass
                return mScrollable && super.onTouchEvent(ev);
            default:
                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);
    }

}

那么,

 <com.mypackagename.LockableScrollView 
        android:id="@+id/QuranGalleryScrollView" 
        android:layout_height="fill_parent" 
        android:layout_width="fill_parent">
    
        <Gallery android:id="@+id/Gallery" 
            android:layout_width="fill_parent" 
            android:layout_height="fill_parent"
            android:scrollbars="horizontal">
        </Gallery>
    
    </com.mypackagename.LockableScrollView>

在您的 XML 文件中(只是将 ScrollView 更改为您的特殊 LockableScrollView)。

然后调用

((LockableScrollView)findViewById(R.id.QuranGalleryScrollView)).setScrollingEnabled(false);

禁用视图滚动。