本篇文章主要讲述如何解决让listview上下左右滑动,并且宽度无限制。这就要使用两个HorizontalScrollView联动来实现这个功能。
HorizontalScrollView实际是一个FrameLayout,一般里面只放置LinearLayout子控件。如果要让listview上下左右滑动,就必须重写listview。
案例如下:
1、先重写HorizontalScrollView使得两个HorizontalScrollView可以同步滚动
public class SyncHorizontalScrollView extends HorizontalScrollView {
private View mView;
public SyncHorizontalScrollView(Context context) {
super(context);
}
public SyncHorizontalScrollView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public SyncHorizontalScrollView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
protected void onScrollChanged(int l, int t, int oldl, int oldt) {
super.onScrollChanged(l, t, oldl, oldt);
if (mView != null) {
mView.scrollTo(l, t);
}
}
public void setSrollView(View view) {
mView = view;
}
}
2、重写listview,解决与上层控件滑动冲突
public class NoscrollListView extends ListView {
public NoscrollListView(Context context) {
super(context);
}
public NoscrollListView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public NoscrollListView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST);
super.onMeasure(widthMeasureSpec, expandSpec);
}
}
3、绑定SyncHorizontalScorllView
NoscrollListView lv_Data;//主列表 NoscrollListView lv_left;//左侧列表 SyncHorizontalScollView mHeaderHorizontal, mDataHorizontal; lv_Data = findViewById(R.id.lv_data); lv_left = findViewById(R.id.lv_left); mHeaderHorizontal = findViewById(R.id.header_horizontal); mDataHorizontal = findViewById(R.id.data_horizontal); mHeaderHorizontal.setScrollView(mDataHorizontal); mDataHorizontal.setScrollView(mHeaderHorizontal);
4、编写主要页面(页面主体分为两部分,一部分为上部的标题列,另一部分是下部的数据表,其中数据表又分为左侧不可左右滑动的列,和右侧可上下左右滑动的数据列表)
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context=".MainActivity"> <!--标题列布局--> <LinearLayout android:layout_width="match_parent" android:layout_height="50dp" android:background="@android:color/holo_blue_dark" android:orientation="horizontal"> <LinearLayout android:layout_width="0dp" android:layout_height="50dp" android:layout_weight="1" android:orientation="vertical"> <TextView android:layout_width="100dp" android:layout_height="match_parent" android:gravity="center" android:text="1" android:textSize="25sp" /> </LinearLayout> <View android:layout_width="1px" android:layout_height="match_parent" android:background="@android:color/black" />