相关疑难解决方法(0)

ScrollView Touch Handling中的Horizo​​ntalScrollView

我有一个ScrollView环绕我的整个布局,以便整个屏幕可滚动.我在这个ScrollView中的第一个元素是一个Horizo​​ntalScrollView块,它具有可以水平滚动的功能.我在horizo​​ntalscrollview中添加了一个ontouchlistener来处理触摸事件并强制视图"捕捉"到ACTION_UP事件上最近的图像.

所以我想要的效果就像股票android主屏幕,你可以从一个滚动到另一个,当你举起手指时,它会捕捉到一个屏幕.

这一切都很有效,除了一个问题:我需要从左到右几乎完全水平滑动,以便ACTION_UP进行注册.如果我至少垂直滑动(我认为许多人往往会在他们的手机上左右滑动),我会收到ACTION_CANCEL而不是ACTION_UP.我的理论是,这是因为横向视图滚动视图位于滚动视图内,并且滚动视图正在劫持垂直触摸以允许垂直滚动.

如何在水平滚动视图中禁用滚动视图的触摸事件,但仍允许在滚动视图中的其他位置正常垂直滚动?

这是我的代码示例:

   public class HomeFeatureLayout extends HorizontalScrollView {
    private ArrayList<ListItem> items = null;
    private GestureDetector gestureDetector;
    View.OnTouchListener gestureListener;
    private static final int SWIPE_MIN_DISTANCE = 5;
    private static final int SWIPE_THRESHOLD_VELOCITY = 300;
    private int activeFeature = 0;

    public HomeFeatureLayout(Context context, ArrayList<ListItem> items){
        super(context);
        setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));
        setFadingEdgeLength(0);
        this.setHorizontalScrollBarEnabled(false);
        this.setVerticalScrollBarEnabled(false);
        LinearLayout internalWrapper = new LinearLayout(context);
        internalWrapper.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));
        internalWrapper.setOrientation(LinearLayout.HORIZONTAL);
        addView(internalWrapper);
        this.items = items;
        for(int i = 0; i< items.size();i++){
            LinearLayout featureLayout = (LinearLayout) View.inflate(this.getContext(),R.layout.homefeature,null);
            TextView header = (TextView) …
Run Code Online (Sandbox Code Playgroud)

android horizontalscrollview ontouchlistener android-scrollview

224
推荐指数
7
解决办法
13万
查看次数

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

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

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

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

android android-listview android-viewpager

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

在ViewPager中同步所有ListView

在我的应用程序中,我有一个ViewPager,每个ViewPager都有一个自定义ListView链接到表格中的行.问题是,当我在第一页中滚动ListView然后滚动ViewPager时,第一页的ListView和第二页的ListView未对齐.listView必须对齐,因为在第一个中我有一个带有描述的TextView,然后有4个带有数据的颜色,而在下一个没有描述的ListViews 6颜色中,所以如果它们未对齐,那么它非常复杂.那么如何一次滚动所有listViews?

编辑:

非常感谢Rahul Parsani ...我终于设法如何做到这一点......如果你有listView在单独的片段中,并且片段的编号是未定义的,这就是答案:

final ArrayList<ListView> lvs = new ArrayList<ListView>();
        for (int j = 0; j < adapter.getCount(); j++) {
            YourFragment fragJ = (YourFragment) adapter.getItem(j);
            final ListView listViewJ = fragJ.lv;
            lvs.add(listViewJ);
        }

        for (int j = 0; j < lvs.size(); j++) {
            final int x = j;
            lvs.get(j).setOnTouchListener(new OnTouchListener() {

                boolean dispatched = false;
                @Override
                public boolean onTouch(View v, MotionEvent event) {
                    if (!dispatched) {
                        dispatched = true;
                        if (x != 0) {
                            lvs.get(x - 1).dispatchTouchEvent(event);
                        };
                        if …
Run Code Online (Sandbox Code Playgroud)

android listview android-listview android-fragments android-viewpager

6
推荐指数
1
解决办法
8095
查看次数