Android支持横行滚动的ListView控件
16lz
2022-01-24
package com.nmbb;
import android.content.Context;
import android.util.AttributeSet;
import android.view.GestureDetector.OnGestureListener;
import android.view.GestureDetector;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.widget.LinearLayout;
import android.widget.ListView;
/**
* 自定义支持横向滚动的ListView
* @author 农民伯伯
* @version 2011-12-4
*
*/
public class HVListView extends ListView {
/** 手势 */
private GestureDetector mGesture;
/** 列头 */
public LinearLayout mListHead;
/** 偏移坐标 */
private int mOffset = 0;
/** 屏幕宽度 */
private int screenWidth;
/** 构造函数 */
public HVListView(Context context, AttributeSet attrs) {
super(context, attrs);
mGesture = new GestureDetector(context, mOnGesture);
}
/** 分发触摸事件 */
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
super.dispatchTouchEvent(ev);
return mGesture.onTouchEvent(ev);
}
/** 手势 */
private OnGestureListener mOnGesture = new GestureDetector.SimpleOnGestureListener() {
@Override
public boolean onDown(MotionEvent e) {
return true;
}
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
float velocityY) {
return false;
}
/** 滚动 */
@Override
public boolean onScroll(MotionEvent e1, MotionEvent e2,
float distanceX, float distanceY) {
synchronized (HVListView.this) {
int moveX = (int) distanceX;
int curX = mListHead.getScrollX();
int scrollWidth = getWidth();
int dx = moveX;
//控制越界问题
if (curX + moveX scrollWidth)
dx = scrollWidth - getScreenWidth() - curX;
mOffset += dx;
//根据手势滚动Item视图
for (int i = 0, j = getChildCount(); i
<linearlayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="horizontal" android:layout_width="wrap_content" android:layout_height="wrap_content"><textview android:id="@+id/item1" android:text="不动列头1" android:textsize="20.0sp" android:gravity="center" android:layout_width="100.0dip" android:layout_height="wrap_content"></textview><linearlayout android:orientation="horizontal" android:id="@+id/head" android:layout_width="1200.0dip" android:layout_height="wrap_content"><textview android:id="@+id/item2" android:text="不动列头2" android:textcolor="@android:color/black" android:textsize="20.0sp" android:singleline="true" android:gravity="center" android:layout_width="150.0dip" android:layout_height="wrap_content"></textview><textview android:id="@+id/item3" android:text="不动列头3" android:textsize="20.0sp" android:singleline="true" android:gravity="center" android:layout_width="150.0dip" android:layout_height="wrap_content"></textview><textview android:id="@+id/item4" android:text="不动列头4" android:textcolor="@android:color/black" android:textsize="20.0sp" android:singleline="true" android:gravity="center" android:layout_width="150.0dip" android:layout_height="wrap_content"></textview><textview android:id="@+id/item5" android:text="不动列头5" android:textsize="20.0sp" android:singleline="true" android:gravity="center" android:layout_width="150.0dip" android:layout_height="wrap_content"></textview><textview android:id="@+id/item6" android:text="不动列头6" android:textcolor="@android:color/black" android:textsize="20.0sp" android:singleline="true" android:gravity="center" android:layout_width="150.0dip" android:layout_height="wrap_content"></textview><textview android:id="@+id/item7" android:text="不动列头7" android:textsize="20.0sp" android:singleline="true" android:gravity="center" android:layout_width="150.0dip" android:layout_height="wrap_content"></textview><textview android:id="@+id/item8" android:text="不动列头8" android:textcolor="@android:color/black" android:textsize="20.0sp" android:singleline="true" android:gravity="center" android:layout_width="150.0dip" android:layout_height="wrap_content"></textview><textview android:id="@+id/item9" android:text="不动列头9" android:textsize="20.0sp" android:singleline="true" android:gravity="center" android:layout_width="150.0dip" android:layout_height="wrap_content"></textview></linearlayout></linearlayout>
main.xml
<?xml version="1.0" encoding="utf-8"?><linearlayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:background="#eeffcc" android:layout_width="wrap_content" android:layout_height="fill_parent"><include layout="@layout/item"></include><com.nmbb.hvlistview android:id="@android:id/list" android:background="#FFB84D" android:fastscrollenabled="true" android:fadingedgelength="0.0sp" android:layout_width="1400.0dip" android:layout_height="fill_parent" android:drawselectorontop="false" android:cachecolorhint="@null" android:dividerheight="1.0dip"></com.nmbb.hvlistview></linearlayout>
import android.content.Context;
import android.util.AttributeSet;
import android.view.GestureDetector.OnGestureListener;
import android.view.GestureDetector;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.widget.LinearLayout;
import android.widget.ListView;
/**
* 自定义支持横向滚动的ListView
* @author 农民伯伯
* @version 2011-12-4
*
*/
public class HVListView extends ListView {
/** 手势 */
private GestureDetector mGesture;
/** 列头 */
public LinearLayout mListHead;
/** 偏移坐标 */
private int mOffset = 0;
/** 屏幕宽度 */
private int screenWidth;
/** 构造函数 */
public HVListView(Context context, AttributeSet attrs) {
super(context, attrs);
mGesture = new GestureDetector(context, mOnGesture);
}
/** 分发触摸事件 */
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
super.dispatchTouchEvent(ev);
return mGesture.onTouchEvent(ev);
}
/** 手势 */
private OnGestureListener mOnGesture = new GestureDetector.SimpleOnGestureListener() {
@Override
public boolean onDown(MotionEvent e) {
return true;
}
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
float velocityY) {
return false;
}
/** 滚动 */
@Override
public boolean onScroll(MotionEvent e1, MotionEvent e2,
float distanceX, float distanceY) {
synchronized (HVListView.this) {
int moveX = (int) distanceX;
int curX = mListHead.getScrollX();
int scrollWidth = getWidth();
int dx = moveX;
//控制越界问题
if (curX + moveX scrollWidth)
dx = scrollWidth - getScreenWidth() - curX;
mOffset += dx;
//根据手势滚动Item视图
for (int i = 0, j = getChildCount(); i
<linearlayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="horizontal" android:layout_width="wrap_content" android:layout_height="wrap_content"><textview android:id="@+id/item1" android:text="不动列头1" android:textsize="20.0sp" android:gravity="center" android:layout_width="100.0dip" android:layout_height="wrap_content"></textview><linearlayout android:orientation="horizontal" android:id="@+id/head" android:layout_width="1200.0dip" android:layout_height="wrap_content"><textview android:id="@+id/item2" android:text="不动列头2" android:textcolor="@android:color/black" android:textsize="20.0sp" android:singleline="true" android:gravity="center" android:layout_width="150.0dip" android:layout_height="wrap_content"></textview><textview android:id="@+id/item3" android:text="不动列头3" android:textsize="20.0sp" android:singleline="true" android:gravity="center" android:layout_width="150.0dip" android:layout_height="wrap_content"></textview><textview android:id="@+id/item4" android:text="不动列头4" android:textcolor="@android:color/black" android:textsize="20.0sp" android:singleline="true" android:gravity="center" android:layout_width="150.0dip" android:layout_height="wrap_content"></textview><textview android:id="@+id/item5" android:text="不动列头5" android:textsize="20.0sp" android:singleline="true" android:gravity="center" android:layout_width="150.0dip" android:layout_height="wrap_content"></textview><textview android:id="@+id/item6" android:text="不动列头6" android:textcolor="@android:color/black" android:textsize="20.0sp" android:singleline="true" android:gravity="center" android:layout_width="150.0dip" android:layout_height="wrap_content"></textview><textview android:id="@+id/item7" android:text="不动列头7" android:textsize="20.0sp" android:singleline="true" android:gravity="center" android:layout_width="150.0dip" android:layout_height="wrap_content"></textview><textview android:id="@+id/item8" android:text="不动列头8" android:textcolor="@android:color/black" android:textsize="20.0sp" android:singleline="true" android:gravity="center" android:layout_width="150.0dip" android:layout_height="wrap_content"></textview><textview android:id="@+id/item9" android:text="不动列头9" android:textsize="20.0sp" android:singleline="true" android:gravity="center" android:layout_width="150.0dip" android:layout_height="wrap_content"></textview></linearlayout></linearlayout>
main.xml
<?xml version="1.0" encoding="utf-8"?><linearlayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:background="#eeffcc" android:layout_width="wrap_content" android:layout_height="fill_parent"><include layout="@layout/item"></include><com.nmbb.hvlistview android:id="@android:id/list" android:background="#FFB84D" android:fastscrollenabled="true" android:fadingedgelength="0.0sp" android:layout_width="1400.0dip" android:layout_height="fill_parent" android:drawselectorontop="false" android:cachecolorhint="@null" android:dividerheight="1.0dip"></com.nmbb.hvlistview></linearlayout>
更多相关文章
- Android(安卓)ScrollViewy与HorizontalScrollView实现上下左右滚
- Android(安卓)ViewPager 中嵌套webview 的滚动处理
- Android(安卓)可滚动圆形进度条 滑块和进度在进度条上面跟着滚动
- android listview 滚动时异步加载图片的问题
- Android(安卓)手势识别中的两个默认实现SimpleOnScaleGestureLis
- Android(安卓)手势滑动切换activity
- Android(安卓)手势(Gesture)——手势检测
- Android(安卓)手势(Gesture)——手势检测
- Android之自定义View实现随手势滑动的小圆球