如何禁用 HorizontalScrollView
How to disable HorizontalScrollView
我正在编写自定义 ChipGroup class,在布局中我有一个 HorizontalScrollView 和一个 Material ChipGroup。在我的构造函数中,我传递了一个名为 "isScrollable"
的布尔值,因为我希望它可以在滚动时进行配置。
如果滚动配置为 false,是否有办法使 HorizontalScrollView 的滚动失效?
- 您不能禁用 ScrollView 的滚动。你需要
扩展到 ScrollView 并将 onTouchEvent 方法覆盖到 return
当某些条件匹配时为 false。
- Gallery 组件滚动
水平地不管它是否在 ScrollView 中 - a
ScrollView 只提供垂直滚动(你需要一个
HorizontalScrollView 用于水平滚动)。
- 你好像说你
图像拉伸本身有问题——这什么都没有
要处理 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);
禁用视图滚动。
我正在编写自定义 ChipGroup class,在布局中我有一个 HorizontalScrollView 和一个 Material ChipGroup。在我的构造函数中,我传递了一个名为 "isScrollable"
的布尔值,因为我希望它可以在滚动时进行配置。
如果滚动配置为 false,是否有办法使 HorizontalScrollView 的滚动失效?
- 您不能禁用 ScrollView 的滚动。你需要 扩展到 ScrollView 并将 onTouchEvent 方法覆盖到 return 当某些条件匹配时为 false。
- Gallery 组件滚动 水平地不管它是否在 ScrollView 中 - a ScrollView 只提供垂直滚动(你需要一个 HorizontalScrollView 用于水平滚动)。
- 你好像说你 图像拉伸本身有问题——这什么都没有 要处理 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);
禁用视图滚动。