* обычное оправдание, что я новичок *
Я создал Activity в Android Studio с вертикальной прокруткой и добавил к нему несколько элементов, включая веб-просмотр.
Это работает нормально, я могу прокручивать вверх и вниз, и веб-представление отображается правильно.
Моя проблема в том, что объект, отображаемый в веб-просмотре, представляет собой карту (leaflet.js), имеющую собственную горизонтальную и вертикальную прокрутку, как только я двигаю пальцем.
Теперь, когда я перемещаю палец выше или ниже горизонтали веб-просмотра, ничего не происходит, и если я перемещаю их поверх веб-просмотра, карта прокручивается влево и вправо, но, к сожалению, всякий раз, когда я перемещаю палец по вертикали, вид прокрутки перемещается вверх и вниз, а веб-просмотр остается точно в таком же вертикальном положении.
Можно ли отключить вертикальную прокрутку прокрутки, пока мой палец касается карты? Это мой не рабочий код:
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;
};
});
После добавления этого кода даже горизонтальная прокрутка больше не возможна, но, возможно, вы поможете мне заставить его работать.
Заранее спасибо :)
С уважением, Кристиан
Вы можете расширить 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);
это решение не позволяет внутренним объектам (например, RV) работать
Спасибо за быструю поддержку, все сработало так, как я хотел :)