ScrollView中嵌套ListView,GridView
来源:互联网 发布:产品摄影 知乎 编辑:程序博客网 时间:2024/05/17 03:18
一、在ScrollView中添加一属性 android:fillViewport=”true” 。
二、指定ListView的高度 android:layout_height=”XXXdip” ;
三、通过方法计算高度 setLayoutParams(params);
private void setListViewHeight(ListView listView) {//获取ListView对应的AdapterListAdapter listAdapter = listView.getAdapter();if (listAdapter == null) {return;}int totalHeight = 0;for (int i = 0, len = listAdapter.getCount(); i < len; i++) { //listAdapter.getCount()返回数据项的数目View listItem = listAdapter.getView(i, null, listView);listItem.measure(0, 0); //计算子项View 的宽高totalHeight += listItem.getMeasuredHeight(); //统计所有子项的总高度}ViewGroup.LayoutParams params = listView.getLayoutParams();params.height = totalHeight + (listView.getDividerHeight() * (listAdapter.getCount() - 1));//listView.getDividerHeight()获取子项间分隔符占用的高度//params.height最后得到整个ListView完整显示需要的高度listView.setLayoutParams(params);}
四、重写ListView,GridView
public class TestListView extends ListView{ public TestListView(Context context) { super(context); // TODO Auto-generated constructor stub } public TestListView(Context context, AttributeSet attrs) { super(context, attrs); // TODO Auto-generated constructor stub } public TestListView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); // TODO Auto-generated constructor stub } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { // TODO Auto-generated method stub int expandSpec = MeasureSpec.makeMeasureSpec( Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST); super.onMeasure(widthMeasureSpec, expandSpec); } }
public class MyGridView extends GridView{ public MyGridView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); // TODO Auto-generated constructor stub } public MyGridView(Context context, AttributeSet attrs) { super(context, attrs); // TODO Auto-generated constructor stub } public MyGridView(Context context) { super(context); // TODO Auto-generated constructor stub } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { // TODO Auto-generated method stub int expandSpec = MeasureSpec.makeMeasureSpec( Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST); super.onMeasure(widthMeasureSpec, expandSpec); } }
五、 解决scroolview与viewpager冲突
1.自定义scrollview
/** * 能够兼容ViewPager的ScrollView * @Description: 解决了ViewPager在ScrollView中的滑动反弹问题 * @File: ScrollViewExtend.java * @Package com.image.indicator.control * @Author Hanyonglu * @Date 2012-6-18 下午01:34:50 * @Version V1.0 */ 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.自定义viewpager
public class ChildViewPager extends ViewPager{ /** 触摸时按下的点 **/ PointF downP = new PointF(); /** 触摸时当前的点 **/ PointF curP = new PointF(); OnSingleTouchListener onSingleTouchListener; public ChildViewPager(Context context, AttributeSet attrs) { super(context, attrs); // TODO Auto-generated constructor stub } public ChildViewPager(Context context) { super(context); // TODO Auto-generated constructor stub } @Override public boolean onInterceptTouchEvent(MotionEvent arg0) { // TODO Auto-generated method stub //当拦截触摸事件到达此位置的时候,返回true, //说明将onTouch拦截在此控件,进而执行此控件的onTouchEvent return true; } @Override public boolean onTouchEvent(MotionEvent arg0) { // TODO Auto-generated method stub //每次进行onTouch事件都记录当前的按下的坐标 curP.x = arg0.getX(); curP.y = arg0.getY(); if(arg0.getAction() == MotionEvent.ACTION_DOWN){ //记录按下时候的坐标 //切记不可用 downP = curP ,这样在改变curP的时候,downP也会改变 downP.x = arg0.getX(); downP.y = arg0.getY(); //此句代码是为了通知他的父ViewPager现在进行的是本控件的操作,不要对我的操作进行干扰 getParent().requestDisallowInterceptTouchEvent(true); } if(arg0.getAction() == MotionEvent.ACTION_MOVE){ //此句代码是为了通知他的父ViewPager现在进行的是本控件的操作,不要对我的操作进行干扰 getParent().requestDisallowInterceptTouchEvent(true); } if(arg0.getAction() == MotionEvent.ACTION_UP){ //在up时判断是否按下和松手的坐标为一个点 //如果是一个点,将执行点击事件,这是我自己写的点击事件,而不是onclick if(downP.x==curP.x && downP.y==curP.y){ onSingleTouch(); return true; } } return super.onTouchEvent(arg0); } /** * 单击 */ public void onSingleTouch() { if (onSingleTouchListener!= null) { onSingleTouchListener.onSingleTouch(); } } /** * 创建点击事件接口 * @author wanpg * */ public interface OnSingleTouchListener { public void onSingleTouch(); } public void setOnSingleTouchListener(OnSingleTouchListener onSingleTouchListener) { this.onSingleTouchListener = onSingleTouchListener; } }
0 0
- ScrollView中嵌套ListView,GridView
- ScrollView嵌套GridView、ListView
- ScrollView嵌套ListView、GridView
- ScrollView 嵌套 ListView GridView
- ScrollView中嵌套GridView,Listview的办法
- ScrollView中嵌套GridView,Listview的办法
- ScrollView中嵌套GridView,Listview的办法
- ScrollView中嵌套GridView,Listview的办法
- ScrollView中嵌套GridView,Listview的办法
- ScrollView中嵌套使用ListView,GridView
- ScrollView中嵌套GridView,Listview的办法
- Android ScrollView中嵌套GridView,ListView
- android中ListView嵌套GridView,或者ScrollView嵌套GridView
- 如何在ScrollView中嵌套ListView、ScrollView、EditText、GridView
- 如何在ScrollView中嵌套ListView、ScrollView、EditText、GridView
- ScrollView嵌套ListView,GridView;ListView嵌套ListView,GridView;ExpanderListView嵌套...
- ScrollView嵌套GridView和ListView
- GridView ListView 嵌套 ScrollView 解决方案
- XMPPFrameWork IOS 开发(一)xmpp简介
- java jodd框架介绍及使用示例
- linux中fork()函数详解
- nginx负载均衡基于ip_hash的session粘帖
- 地理信息与遥感技术应用于草地资源监测实例
- ScrollView中嵌套ListView,GridView
- 通过dsh批量管理Linux服务器
- 设计->约束
- C#苹果应用开发——第一讲初始Xamarin
- vs2010中删除sdf文件和ipch文件夹
- oracle中OLTP和OLAP
- vs2008 调用matlab 2013a引擎
- [置顶] XMPPFrameWork IOS 开发(二)- xcode配置
- JavaSE(1):java基础知识及基础语法