当前位置: 首页 > 知识库问答 >
问题:

滚动查看内部视图页面:滑动不起作用

汪晟睿
2023-03-14

我有带有三个片段的视图页面管理器,其中一个是带有滚动视图的框架布局:

<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>

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

编辑:我试图覆盖滚动视图的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没有收到此事件;

共有3个答案

皇甫树
2023-03-14

面向2019年的未来读者

使用ViewPager2来避免这个问题。你可以在这个主题中找到ViewPager2实现的好例子。

庞意智
2023-03-14

问题是不清楚你想要发生什么滚动,是ViewPager的滚动还是滚动视图的滚动。如果你真的需要一个滚动内滚动,那么你需要覆盖内部滚动视图的OnTouchListener,并添加代码来决定何时捕捉和使用触摸,以及何时将其传递回父视图。

在这种情况下,您可以执行一些操作来测试轻扫是否向上/向下,然后保持触摸,否则,如果轻扫是横向的,则将其传回。

葛越
2023-03-14

好了,我在@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);
}
}

然后在片段中,我将视图页码器放到此视图中,它可以完美地工作

 类似资料:
  • 我在Scrollview中有Recyclerview 现在,滚动时,layoutStaticContent保持固定在顶部

  • 问题内容: 我正在开发一个应用程序。在我的应用程序中,我正在使用listview显示json中的数据。所有数据完美显示。但是我想要的是先显示10个对象,然后显示加载项,然后显示其余10个。我的json响应如下。 Interestsent.java EndlessScroolListener.java CustomAdapterSent.java 公共类CustomAdapterSent扩展Base

  • 我同时使用了Gallery和ViewPager小工具,我从web服务中获取图像,但我不能将它们放在ViewPager中,但在Gallery中很容易。我用这个教程是为了view pager http://mobile . tuts plus . com/tutorials/Android/Android-user-interface-design-horizontal-view-paging/ 我想

  • 问题内容: 考虑我有一个问题清单。当我单击第一个问题时,它应该自动带我到页面底部。 实际上,我确实知道可以使用jQuery完成此操作。 因此,您能为我提供一些文档或一些链接,以找到该问题的答案吗? 编辑:需要滚动到页面底部的特定HTML 元素 问题答案: 不需要jQuery。我从Google搜索获得的大多数热门结果都给了我这个答案: 在嵌套元素的地方,文档可能不会滚动。在这种情况下,您需要定位要滚

  • 我有一个问题清单。当我点击第一个问题时,它应该会自动把我带到页面底部。 事实上,我确实知道这可以使用jQuery来完成。 所以,你能给我一些文件或一些链接,我可以找到这个问题的答案吗? 编辑:需要滚动到页面底部的特定HTML元素

  • 我有一个按钮,当点击应该平滑地滚动到顶部。平稳过渡并不奏效。现场网站。-->http://acetronaut.com 这里还有一个代码页。不管用。https://codepen.io/anon/pen/lbpwrv HTML: CSS: jQuery: