您的位置:首页 > 其它

处理ScrollView与listview,gridview的问题

2014-12-23 17:06 148 查看
写一个方法继承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);
}

与ListView的处理  

写一个方法

public class ListViewUtil {

public static void setListViewHeightBasedOnChildren(ListView listView) {
ListAdapter listAdapter = listView.getAdapter();
if (listAdapter == null) {
return;
}
int totalHeight = 0;

for (int i = 0; i < listAdapter.getCount(); i++) {
View listItem = listAdapter.getView(i, null, listView);
listItem.measure(0, 0);
totalHeight += listItem.getMeasuredHeight();
}
ViewGroup.LayoutParams params = listView.getLayoutParams();
params.height = totalHeight+ (listView.getDividerHeight() * (listAdapter.getCount() - 1));
listView.setLayoutParams(params);
}

}


在所需的xml里

 <com.xmx.jz.util.ScrollViewExtend
        android:id="@+id/soft_home_page_scrollView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        android:overScrollMode="never"
        android:visibility="gone"
        android:layout_below="@id/soft3_gridView1"
        android:scrollbars="none">
    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:orientation="vertical"
        android:overScrollMode="never"
        >
     
 <ListView

        android:id="@+id/software3_listview_1"

        android:layout_width="fill_parent"

        android:layout_height="match_parent" 

        android:paddingTop="5dp"

        android:scrollbars="none"

        android:divider="@color/layout_bg"

android:dividerHeight="4dp"

        />
    </LinearLayout>
</com.xmx.jz.util.ScrollViewExtend>


在所需的activity里

获得 ScrollViewExtend 的id 然后在listview.setAdapter();后面添加

ListViewUtil.setListViewHeightBasedOnChildren(listview);
scrollviewextend .smoothScrollTo(0, 0);  就OK

GridView的问题

      也是写一个方法 继承 GridView

public class MyGridView extends GridView{

public MyGridView(Context context) {
super(context);
}
public MyGridView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public MyGridView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}

/**
* 解决ScrollView嵌套GridView后,GridView显示不全问题
*/
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
int expandSpec=MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE>>2, MeasureSpec.AT_MOST);
super.onMeasure(widthMeasureSpec, expandSpec);
}

}

然后在xml里写

<类所在的包名.MyGridView

                android:id="@+id/gridView1"

                android:layout_width="match_parent"

                android:layout_height="wrap_content"

                android:numColumns="2"

          >

            </类所在的包名.MyGridView>

OK      感觉好啰嗦!!!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: