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>

更多相关文章

  1. Android(安卓)ScrollViewy与HorizontalScrollView实现上下左右滚
  2. Android(安卓)ViewPager 中嵌套webview 的滚动处理
  3. Android(安卓)可滚动圆形进度条 滑块和进度在进度条上面跟着滚动
  4. android listview 滚动时异步加载图片的问题
  5. Android(安卓)手势识别中的两个默认实现SimpleOnScaleGestureLis
  6. Android(安卓)手势滑动切换activity
  7. Android(安卓)手势(Gesture)——手势检测
  8. Android(安卓)手势(Gesture)——手势检测
  9. Android之自定义View实现随手势滑动的小圆球

随机推荐

  1. android百度地图 SDK v3.5.0
  2. Android 设置全屏显示的方法
  3. Phone Gap开发一:整合jQuery Mobile开发An
  4. 银联手机支付 手机客户端有几个?
  5. android 单击 切换图片 --- 注意图片大小
  6. 使用android 隐藏命令
  7. 深入解析RxJava源码(一)Observable对象的构
  8. 【Android自学笔记】为Android应用程序添
  9. Android RecyclerView网格布局的学习
  10. [置顶] Android 通过经纬度获取地理位置