ScrollView嵌套Viewpager和ListView的整合

1、ScrollView嵌套Viewpager解决滑动冲突:

(1)重新ScrollView(法一)


/**

 * 能够兼容ViewPager的ScrollView

 * @Description: 解决了ViewPager在ScrollView中的滑动反弹问题

 */

public class ScrollViewExtend extends ScrollView {

    // 滑动距离及坐标

    private float xDistance, yDistance, xLast, yLast;

    public ScrollViewExtend(Context context, AttributeSet attrs) {

        super(context, attrs);

    }

    @Override

    public boolean onInterceptTouchEvent(MotionEvent ev) {

        switch (ev.getAction()) {

            case MotionEvent.ACTION_DOWN:

                xDistance = yDistance = 0f;

                xLast = ev.getX();

                yLast = ev.getY();

                break;

            case MotionEvent.ACTION_MOVE:

                final float curX = ev.getX();

                final float curY = ev.getY();

                   

                xDistance += Math.abs(curX - xLast);

                yDistance += Math.abs(curY - yLast);

                xLast = curX;

                yLast = curY;

                   

                if(xDistance > yDistance){

                    return false;

                }

        }

        return super.onInterceptTouchEvent(ev);

    }

}

(2)重新ScrollView(法二)


public class MyScrollView extends ScrollView {

private boolean canScroll;

private GestureDetector mGestureDetector;

View.OnTouchListener mGestureListener;

public MyScrollView(Context context, AttributeSet attrs) {

super(context, attrs);

mGestureDetector = new GestureDetector(new YScrollDetector());

canScroll = true;

}

@Override

public boolean onInterceptTouchEvent(MotionEvent ev) {

if(ev.getAction() == MotionEvent.ACTION_UP)

canScroll = true;

return super.onInterceptTouchEvent(ev) && mGestureDetector.onTouchEvent(ev);

}

class YScrollDetector extends SimpleOnGestureListener {

@Override

public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {

if(canScroll)

if (Math.abs(distanceY) >= Math.abs(distanceX))

canScroll = true;

else

canScroll = false;

return canScroll;

}

}

}

个人是用第一个方法解决的,根据不同的情况可以自己处理!

(2)ScrollView嵌套ListView请查看此处

注:本文仅代码都是网上找的,本文仅作记录而已!

时间: 2024-11-11 07:46:17

ScrollView嵌套Viewpager和ListView的整合的相关文章

(转)ViewPager,ScrollView 嵌套ViewPager滑动冲突解决

ViewPager,ScrollView 嵌套ViewPager滑动冲突解决 本篇主要讲解一下几个问题 粗略地介绍一下View的事件分发机制 解决事件滑动冲突的思路及方法 ScrollView 里面嵌套ViewPager导致的滑动冲突 ViewPager里面嵌套ViewPager 导致的滑动冲突 轮播图的几种实现方式 先看一下效果图 ScrollView里面嵌套ViewPager ViewPager里面嵌套ViewPager View的 事件分发机制 这篇博客大打算详细讲解View的事件分发机制

完美解决ScrollView嵌套ViewPager滑动失效和无法正常滑动冲突问题

/******************************************************************************* * Copyright 2011, 2012 Chris Banes. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the Li

解决ScrollView嵌套ViewPager,导致ViewPager不能滑动的问题

import java.lang.reflect.Field; import java.lang.reflect.Method; /** * 解决ScrollView嵌套ViewPager,导致ViewPager不能滑动的问题 */ public class CustomScrollView extends ScrollView { private GestureDetector mGestureDetector; private int Scroll_height = 0; private i

解决ScrollView嵌套viewpager滑动事件冲突问题

重写ScrollView 第一种方案能解决viewpager的滑动问题,但是scrollView有时会滑不动 public class VerticalScrollView extends ScrollView { private GestureDetector mGestureDetector; public VerticalScrollView(Context context, AttributeSet attrs){ super(context, attrs); mGestureDetec

ScrollView嵌套GridView和ListView行高问题

1.GidView使用的时候可以先重载GirdView例如: 1 public class MyGridView extends GridView { 2 3 public MyGridView(Context context) { 4 super(context); 5 } 6 7 public MyGridView(Context context, AttributeSet attrs) { 8 super(context, attrs); 9 } 10 11 public MyGridVi

解决ScrollView嵌套ViewPager出现的滑动冲突问题

/** * */ public class ScrollView1 extends ScrollView { private boolean canScroll; private GestureDetector mGestureDetector; View.OnTouchListener mGestureListener; public ScrollView1(Context context, AttributeSet attrs) { super(context, attrs); mGestu

android滑动组件嵌套一般思路,多任务手势思路,触摸传递思路,【例】listview嵌套viewpager

在android UI开发中,我们经常会遇到这种需求: 两个支持滑动的组件,比如listview嵌套多个listview,listview的item是一个viewpager或gallary?亦或是scrollview嵌套scrollview等等. 一般情况下,你还可能需要支持如下几种功能: ¤ 两层组件都可以滑动 ¤ 不让两个组件同时滑动,或者让两个组件同时滑动并可以自己调节 ¤ 不影响底层view的子view和嵌套view的子view的点击事件 实现上述功能时,我们也经常遇到一些问题: ¤ 点

ScrollView中嵌套两个ListView

做的项目中要使用两个ListView在同一个页面上下显示,因为数据源不同,不能通过在Adapter中设置标志位去区分显示,最后只能硬着头皮做一个ScrollView嵌套两个ListView,但按正常情况是不能同时显示的,会出现上面的ListView完全显示,下面的只显示一个Item,查了一些资料终于成功了 主要有一个ListViewUtility ,代码如下: import java.io.File; import android.content.Intent; import android.n

scrollview嵌套上下拉控件嵌套recyclerview

相信会碰到很多类似的需求,一个列表控件,然后控件上方的一个头部需要自定义,这样就不好有时候也不能加在列表控件的头部了,那必须得嵌套一层scrollview了,没毛病,那么一般的列表控件都是有上拉下拉的操作,而且一般也是在 github 上找寻一个收藏量高的 来做为一个全局通用的上下拉控件,这里问题就来了,一般的 scrollview 嵌套 recyclerview 或者 listview 都毕竟容易解决,可是在加上一层上下拉控件呢?上下拉控件肯定会有它自己的触摸处理机制,这样你改起来也很麻烦,这