您的位置:首页 > 移动开发 > Android开发

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

2015-01-14 13:05 543 查看
显示问题:

显示问题:

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;

}



}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐