gpt4 book ai didi

android - ViewPager : swipe not working 内的 ScrollView

转载 作者:太空宇宙 更新时间:2023-11-03 13:17:09 24 4
gpt4 key购买 nike

我有包含三个 fragment 的 ViewPager,其中之一是带有 ScrollView 的 FrameLayout:

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent">

<ScrollView
android:layout_width="match_parent"
android:layout_height="wrap_content">

<LinearLayout
android:id="@+id/table"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"/>
</ScrollView>

<Button
android:id="@+id/buttonRemove"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/bg_button_red"
android:layout_gravity="bottom"
android:layout_margin="4dp"
android:text="@string/button_remove_last_round"
android:textColor="#ffffff"
android:textSize="24sp"/>


</FrameLayout>

如果我在按钮上滑动,它就会工作。但是如果我在 ScrollView 上滑动,它不起作用,只能向上/向下滚动

编辑:我试图覆盖 Scrollview 的 OnTouchEvent:

@Override
public boolean onTouchEvent(MotionEvent ev) {

switch (ev.getAction()){
case MotionEvent.ACTION_DOWN:
touchX = ev.getX();
touchY = ev.getY();
return super.onTouchEvent(ev);//if I change it to 'break', then only swipe works, but no scroll
case MotionEvent.ACTION_MOVE:
if(Math.abs(touchX-ev.getX())<40){
return super.onTouchEvent(ev);//Scroll works perfectly
}else{
return false;//Scroll disabled, but swipe still not working
}
case MotionEvent.ACTION_CANCEL:
case MotionEvent.ACTION_UP:
touchX=0;
touchY=0;
break;
}
return false;
}

现在我可以禁用滚动,但滑动仍然不起作用,如果 X 点之间的差异超过 40,我将事件传递给 viewpager,但是 viewpager 的 onTouchListener 没有得到这个事件;

最佳答案

好的,我在@yedidyak 的帮助下找到了解决方案。我写了我的自定义 ScrollView:

public class CustomScrollView extends ScrollView {

float touchX = 0;
float touchY = 0;

ViewPager parentPager;

public void setParentPager(ViewPager parentPager) {
this.parentPager = parentPager;
}

public CustomScrollView(Context context, AttributeSet attrs) {
super(context, attrs);
}

public CustomScrollView(Context context) {
super(context);
}

@Override
public boolean onTouchEvent(MotionEvent ev) {

switch (ev.getActionMasked()){
case MotionEvent.ACTION_DOWN:
touchX = ev.getX();
touchY = ev.getY();
return super.onTouchEvent(ev);
case MotionEvent.ACTION_MOVE:
if(Math.abs(touchX-ev.getX())<40){
return super.onTouchEvent(ev);
}else{
if (parentPager==null) {
return false;
} else {
return parentPager.onTouchEvent(ev);
}
}
case MotionEvent.ACTION_CANCEL:
case MotionEvent.ACTION_UP:
touchX=0;
touchY=0;
break;
}
return super.onTouchEvent(ev);
}
}

然后在 fragment 中我将 viewpager 放到这个 View 中,它完美地工作

关于android - ViewPager : swipe not working 内的 ScrollView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34251433/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com