**我是初学者的惯用借口**
我在Android Studio中创建了一个具有垂直滚动视图的活动,并添加了几个项目,其中包括一个webview。
这工作得很好,我可以向上和向下滚动,web视图显示正确。
我的问题是,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;
};
});添加此代码后,即使水平滚动也是不可能的,但也许你可以帮助我让它工作。
提前感谢:)
敬重基督徒
发布于 2019-01-10 07:41:08
您可以按如下方式扩展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);https://stackoverflow.com/questions/54119632
复制相似问题