Java 如何在android ScrollView上禁用和启用滚动?
我是一个android开发者。我也想使用ScrollView。这个ScrollView需要一些时间来禁用滚动,一些时间来启用滚动。但是我不能禁用滚动。我如何实现它。请帮助我。我也尝试使用一些代码,比如sJava 如何在android ScrollView上禁用和启用滚动?,java,android,scrollview,Java,Android,Scrollview,我是一个android开发者。我也想使用ScrollView。这个ScrollView需要一些时间来禁用滚动,一些时间来启用滚动。但是我不能禁用滚动。我如何实现它。请帮助我。我也尝试使用一些代码,比如s fullparentscrolling.setHorizontalFadingEdgeEnabled(false); fullparentscrolling.setVerticalFadingEdgeEnabled(false); 或 但是它不起作用。试试这个,这将禁用滚动功能 scrollv
fullparentscrolling.setHorizontalFadingEdgeEnabled(false);
fullparentscrolling.setVerticalFadingEdgeEnabled(false);
或
但是它不起作用。试试这个,这将禁用滚动功能
scrollview.setEnabled(false);
不能禁用滚动视图的滚动。当某些条件匹配时,您需要扩展到ScrollView并重写onTouchEvent方法以返回false 您可以按如下方式修改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
if (mScrollable) return super.onTouchEvent(ev);
// only continue to handle the touch event if scrolling enabled
return mScrollable; // mScrollable is always false at this point
default:
return super.onTouchEvent(ev);
}
}
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
// Don't do anything with intercepted touch events if
// we are not scrollable
if (!mScrollable) return false;
else return super.onInterceptTouchEvent(ev);
}
}
下面的参考资料也是关于堆栈溢出的完整解决方案!
将此标记为对其他人的帮助的回答。谢谢你试试这个方法
像这样创建CustomScrollview
import android.content.Context;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.widget.ScrollView;
public class CustomScrollView extends ScrollView {
private boolean enableScrolling = true;
public boolean isEnableScrolling() {
return enableScrolling;
}
public void setEnableScrolling(boolean enableScrolling) {
this.enableScrolling = enableScrolling;
}
public CustomScrollView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
public CustomScrollView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public CustomScrollView(Context context) {
super(context);
}
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
if (isEnableScrolling()) {
return super.onInterceptTouchEvent(ev);
} else {
return false;
}
}
@Override
public boolean onTouchEvent(MotionEvent ev) {
if (isEnableScrolling()) {
return super.onTouchEvent(ev);
} else {
return false;
}
}
}
在xml中
//“com.example.demo”替换为您的packagename
<com.example.demo.CustomScrollView
android:id="@+id/myScroll"
android:layout_width="match_parent"
android:layout_height="wrap_content" >
</com.example.demo.CustomScrollView>
我为滚动视图设置了触控监听器,并在onTouch方法中返回true。 这对我来说是个好办法
mScrollView.setOnTouchListener( new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event)
{
return true;
}
});
最好的您需要通过扩展scrollview来创建自定义scrollview我也尝试过,但id在Anks@Biraj Zalavadia中不起作用。我也实现了它。很抱歉,直到我添加了@Hamad在其解决方案中提到的
onTouchEvent
,它才起作用@你说得对。谢谢你的帮助。我更新了。谢谢!!!你救了我的命。这也适用于我嵌套的scrollview情况,在这种情况下,我需要禁用嵌套的scrollview,直到父scrollview完全滚动到顶部。我的解决方案可以在这里查看:而且不要忘记“扩展ScrollView”,如果您希望ScrollView不使用触摸事件-返回false
有时,这是一种更好的方法。
CustomScrollView myScrollView = (CustomScrollView) findViewById(R.id.myScroll);
myScrollView.setEnableScrolling(false); // disable scrolling
myScrollView.setEnableScrolling(true); // enable scrolling
mScrollView.setOnTouchListener( new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event)
{
return true;
}
});