相关疑难解决方法(0)

在Android中的ViewPager中禁用和启用分页

我使用Android兼容包版本4在我的应用程序中显示pdf页面.我使用PagerAdapter和ViewPager来显示水平滚动视图等pdf页面.

现在的问题在于分页相关的东西.我可以通过检测viewpager中的子进程根据这个线程android:ViewPager和Horizo​​ntalScrollVIew来停止分页,但是当用户触摸该视图之外时,我该如何才能启用它.我使用了以下CodeViewPager代码.

public class CustomViewPager extends ViewPager {

        private boolean enabled;
        private int childId;

        public CustomViewPager(Context context, AttributeSet attrs) {
            super(context, attrs);
            this.enabled = true;
        }

        public void setChildId(int childId) {
            this.childId = childId;
        }

        @Override
        public boolean onInterceptTouchEvent(MotionEvent event) {
            boolean result = false;
            View scroll = getChildAt(childId);
            if (scroll != null) {
                Rect rect = new Rect();
                CommonLogic.logMessage("PDF Page Rectangle  ", TAG, Log.VERBOSE);
                scroll.getHitRect(rect);
                if (rect.contains((int) event.getX(), (int) event.getY())) {
                    setPagingEnabled(false);
                    result = true;
                }
            } …
Run Code Online (Sandbox Code Playgroud)

android android-viewpager

14
推荐指数
1
解决办法
2万
查看次数

滑动ViewPager时禁用ListView滚动

有没有办法在滚动ViewPager的项目时锁定ListView的垂直滚动?或者也许更改ViewPager的水平滚动灵敏度?

谢谢.

最后的编辑

这是我更新的解决方案.感谢您回复Masoud Dadashi,您的评论最终让我想出了解决问题的方法.

这是我的自定义ListView类:

public class FolderListView extends ListView {

    private float xDistance, yDistance, lastX, lastY;

    // If built programmatically
    public FolderListView(Context context) {
        super(context);
        // init();
    }

    // This example uses this method since being built from XML
    public FolderListView(Context context, AttributeSet attrs) {
        super(context, attrs);
        // init();
    }

    // Build from XML layout
    public FolderListView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
        // init();
    }

    @Override
    public boolean onInterceptTouchEvent(MotionEvent ev) {

        switch (ev.getAction()) { …
Run Code Online (Sandbox Code Playgroud)

android android-listview android-viewpager

14
推荐指数
1
解决办法
8935
查看次数

ListView内部的水平RecyclerView不能滚动得非常流畅

我有一个ListView,每个项目都是水平的RecyclerView.我面临的问题是,水平滚动不是很平滑.如果我在一个完全水平的方向上滚动/滑动,那么它工作正常,但如果滚动甚至略微非水平(比如与水平成10度角),它认为上/下滚动而不是左/右,由于父母ListView.我试过这个方法:

   recyclerView.setOnTouchListener(new FlingRecyclerView.OnTouchListener() {
                @Override
                public boolean onTouch(View v, MotionEvent event) {
                    int action = event.getAction();
                    switch (action) {
                        case MotionEvent.ACTION_DOWN:
                            // Disallow ScrollView to intercept touch events.
                            v.getParent().requestDisallowInterceptTouchEvent(true);
                            Log.i("Scroll down", "Intercept true");
                            break;

                        case MotionEvent.ACTION_UP:
                            // Allow ScrollView to intercept touch events.
                            v.getParent().requestDisallowInterceptTouchEvent(false);
                            break;

                        case MotionEvent.ACTION_MOVE:
                            // Allow ScrollView to intercept touch events.
                            v.getParent().requestDisallowInterceptTouchEvent(true);
                            break;
                    }

                    // Handle HorizontalScrollView touch events.
                    v.onTouchEvent(event);
                    return true;
                }
            });
Run Code Online (Sandbox Code Playgroud)

但它不是很有效.事实上,我没有注意到很多改进.那是因为只有当动作完全水平时才会调用此动作事件 - 这种情况已经正常工作了.然后我尝试这样做:

class MyGestureDetector extends GestureDetector.SimpleOnGestureListener …
Run Code Online (Sandbox Code Playgroud)

android listview scroll user-experience android-recyclerview

13
推荐指数
3
解决办法
2009
查看次数

ListView中的ViewPager - 如何锁定滚动轴?

我在ListView的每一行都有一个ViewPager小部件.这提供了类似于架子的UI,因此用户可以在垂直方向上滚动搜索架子,然后在架子的内容中水平滚动.这有效.

但是滚动体验非常糟糕:如果我开始拖动一个架子的ViewPager,水平滚动它,不小心向上/向下拖动一下,然后ListView"陷阱"这个拖动动作,并开始垂直滚动,结束我的水平拖动.在这种状态下,拖动动作不会"返回"到ViewPager,ListView拥有它,就是这样.我必须再次启动另一个拖动操作来影响ViewPager.所以我猜ListView在这些情况下具有优先权.

怎么解决这个问题?我想要完全相反:如果列表行中的ViewPager开始对水平拖动做出反应,那么它应该捕获该动作,并且无论用户如何移动他/她的手指,此拖动都应该停止影响ListView垂直.可以这样做吗?

android android-listview android-viewpager

12
推荐指数
1
解决办法
7768
查看次数

这将是最好的在Android中制作水平滚动应用程序?

我必须制作一个用户在屏幕上移动的应用程序,就像我们的android主屏幕一样.

有一个图像列表,我们可以在水平滚动条中滚动图像.

用户无法更改图像的位置,就像在水平屏幕上排列的一些缩略图一样

这就像iPhone应用程序开发中的分页控件.

我试图找到这样做的方法,但我对android很新,我想知道实现上述目标的最佳方法吗?

我听说过画廊控制,但我不确定它是否适合我的目的.

此外,如果你能给出你建议的答案的链接..这将是很好的,好像有一个新的控制器参与,我将能够更好地理解它,因为我仍然是一个更新鲜.先感谢您.

编辑:对于那些不熟悉iPhone分页视图的人,是一个视频示例.

android scroll

11
推荐指数
6
解决办法
3636
查看次数

在ScrollView的父级中未检测到水平滑动

可能重复:
手势检测和ScrollView问题

编辑:问题与完整的代码在这里问.


我有一个孩子的布局.我设置了一个手势监听器来检测布局上的水平滑动.当布局是LinearLayout时,正确检测到滑动,但是当它是ScrollView时,它不是.我猜这个手势首先被ScrollView检测到,并没有传播到它的优先级,但我不知道如何解决它.

这是我的布局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent" android:layout_height="fill_parent"
    android:orientation="vertical">
    <ImageView android:layout_width="320dp" android:layout_height="30dp"
            android:src="@drawable/header"/>
    <ScrollView android:layout_width="fill_parent" android:layout_height="wrap_content">
        <!-- stuff -->
    </ScrollView>
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)

我将以下监听器设置为我的布局:

class ProductGestureListener extends SimpleOnGestureListener {

    @Override
    public boolean onDown(MotionEvent e) {
        return true;
    }

    @Override
    public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {

        final int SWIPE_MIN_DISTANCE = 120;
        final int SWIPE_MAX_OFF_PATH = 250;
        final int SWIPE_THRESHOLD_VELOCITY = 200;            

        try {
            if (Math.abs(e1.getY() - e2.getY()) > SWIPE_MAX_OFF_PATH)
                return false; …
Run Code Online (Sandbox Code Playgroud)

android scrollview gesture

11
推荐指数
2
解决办法
9941
查看次数

在ScrollViews中使用带有ViewPagers的ScrollViews的Android ViewPager

所以我的活动有一个主ViewPager,在ViewPager里面,每个页面都有一个ScrollView的内容,在ScrollView内部还有另一个ViewPager.

这可能听起来很疯狂,但基本上外部ViewPager包含新闻文章,文章很长,所以有一个ScrollView,在ScrollView内部有多个缩略图/图片,他们也可以刷过.

我尝试过一些不同的自定义ViewPagers,它们具有不同的触摸事件拦截功能但似乎无法完美呈现.它要么完全吸收所有触摸事件,要么ScrollView的垂直滚动在该区域不起作用,否则将使内部水平滚动非常敏感/困难.

有人有完美的解决方案吗?

android scrollview android-viewpager

11
推荐指数
1
解决办法
8045
查看次数

RecyclerView中类似寻呼机的行为

我正在尝试为水平实现类似ViewPager的行为RecyclerView.来自适配器的数据应该正常膨胀和绑定,但是Recycler应该以不同方式处理通过它的导航.当用户滑动(或尝试滚动)时,我Recycler向该方向移动一个项目,将其粘贴到左侧.

我已经拥有了所有项目转换逻辑.我正在使用一个自定义LayoutManager,它覆盖onSmoothScrollToPosition()了一个自定义LinearSmoothScroller()项目,左边的项目粘贴.

问题是 - 如何覆盖RecyclerView滑动的滚动行为并自己处理它们?我尝试禁用滚动LayoutManager然后拦截手势onTouchListener,但这似乎不起作用.RecyclerView框架是否有一个干净的方法来处理这个问题?

android android-recyclerview

10
推荐指数
2
解决办法
5676
查看次数

在android中的Scrollview中设置Viewpager高度

我必须在scrollview中显示一个viewpager(在pager行中的图像下方的图像和文本).我正在从网上下载图像,文本并在寻呼机行中显示.我在srollview中包含了viewpager以支持横向模式.

 <com.xxx.myapp.android.ui.CustomScrollView
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_gravity="center"
    android:fadingEdge="none"
    android:fillViewport="true"
    android:gravity="center">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:descendantFocusability="blocksDescendants"
        android:orientation="vertical" >

        <android.support.v4.view.ViewPager
            android:id="@+id/viewPager"
            android:layout_width="match_parent"
            android:layout_height="800dp"
            android:layout_gravity="top"
            android:layout_marginTop="10dp" />  
    </LinearLayout>
</com.xxx.myapp.android.ui.CustomScrollView> 
Run Code Online (Sandbox Code Playgroud)

这是CustomScrollView.问题是如何根据子高度设置视图寻呼机高度,以便我可以滚动屏幕直到视图寻呼机项目结束.如果我将view pager height设置为wrapcontent,则viewpager中不会显示任何内容.如果我设置了800dp,那么我可以看到寻呼机项目,但屏幕上有不必要的滚动.我不希望我的滚动视图滚动超出寻呼机儿童的高度.请帮我.

android android-scrollview android-viewpager

9
推荐指数
4
解决办法
1万
查看次数

如何调整与ScrollView的交互,以便用户不会意外地向错误的方向滚动?

我们有和app有滚动视图,可以分页(左+右).

我们发现用户在尝试滑动(向左+向右)时会继续滚动(向上或向下),特别是当单手使用手机并使用拇指滑动时.

通过物理实验,上升和下降动作似乎比我们想要的更早开始,即切断点似乎是

| DY | > | dx | =>上下行动

| DY | <| dx | =>左右动作

我想知道是否可以更改滑动动作,这样我们只会在说dy> 1.4*dx时向上和向下滚动,即在垂直平面上使攻角明显更大.

我希望上述内容有道理.

我想我可能需要拦截手势,只能通过符合我更严格标准的那些手势来传递给底层视图.

android scrollview

7
推荐指数
0
解决办法
1544
查看次数