Android中Scrollview、ViewPager冲突问题汇总(已解决)

来源:互联网 发布:淘宝人生 笔趣阁 编辑:程序博客网 时间:2024/05/01 10:29

显示问题:

1、设置ScrollView的fillViewPort为true

2、设置ViewPager的layout_height为一个固定高度,比如:100dip

 

冲突问题:

不过ViewPager显示出来以后,还有另外一个冲突:ViewPager左右不能滑动了!是的,因为这个事件其实已经被外层的ScrollView截获!

重写ScrollView控件!

第一种解决方案:

重写ScrollView,然后嵌套使用无任何问题,如何重写,具体看以下地址

http://stackoverflow.com/questions/2646028/android-horizontalscrollview-within-scrollview-touch-handling

备注:ListView嵌套无法滑动也可以解决,listview布局推荐线性布局,相对布局有小问题,如何解决请google


第二种方案:viewpager结合下拉刷新组件,重写Viewpager组件,如何重写参考以下代码,

package com.bavariama.base.widget;import java.net.ContentHandler;import android.content.Context;import android.support.v4.view.ViewPager;import android.util.AttributeSet;import android.view.GestureDetector;import android.view.MotionEvent;/** * 此ViewPager解决与父容器ScrollView冲突的问题,无法完美解决.有卡顿 * 此自定义组件和下拉刷新scrollview配合暂时小完美,有待改善 * @author bavariama *  */public class InsideViewPager extends ViewPager { float curX = 0f; float downX = 0f; OnSingleTouchListener onSingleTouchListener; public InsideViewPager(Context context) { // TODO Auto-generated constructor stub super(context); } public InsideViewPager(Context context, AttributeSet attrs) { // TODO Auto-generated constructor stub super(context, attrs); } @Override public boolean onTouchEvent(MotionEvent ev) { curX = ev.getX(); // TODO Auto-generated method stub if (ev.getAction() == MotionEvent.ACTION_DOWN) { downX = curX; } int curIndex = getCurrentItem(); if (curIndex == 0) { if (downX <= curX) { getParent().requestDisallowInterceptTouchEvent(false); } else { getParent().requestDisallowInterceptTouchEvent(true); } } else if (curIndex == getAdapter().getCount() - 1) { if (downX >= curX) { getParent().requestDisallowInterceptTouchEvent(false); } else { getParent().requestDisallowInterceptTouchEvent(true); } } else { getParent().requestDisallowInterceptTouchEvent(true); } return super.onTouchEvent(ev); } public void onSingleTouch() { if (onSingleTouchListener != null) { onSingleTouchListener.onSingleTouch(); } } public interface OnSingleTouchListener { public void onSingleTouch(); } public void setOnSingleTouchListner( OnSingleTouchListener onSingleTouchListener) { this.onSingleTouchListener = onSingleTouchListener; }}



 

 

 



0 1
原创粉丝点击