※效果

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbGluZ2xvbmd4aW4yNA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">

※使用方法


package com.cd.slidetest;

import android.os.Bundle;
import android.app.Activity;
import android.graphics.Color;
import android.view.GestureDetector;
import android.view.Menu;
import android.view.MotionEvent;
import android.view.GestureDetector.SimpleOnGestureListener;
import android.widget.LinearLayout;
import android.widget.LinearLayout.LayoutParams;
import android.widget.ScrollView; public class MainActivity extends Activity implements OnScrollChangedListener{ private GestureDetector mGestureDetector = null;
private HScrollView mItemRoom = null;
private ScrollView mVertical = null;
private HScrollView mTimeItem = null;
private LinearLayout mContain = null;
@SuppressWarnings("deprecation")
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mGestureDetector = new GestureDetector(mGestureListener);
makeItems();
setContentView(mContain); } @Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
return true;
} private void makeItems(){
mItemRoom = new HScrollView(this, mGestureDetector);
mItemRoom.setListener(this);
LinearLayout VLayout = new LinearLayout(this);
VLayout.setOrientation(LinearLayout.VERTICAL); for(int i = 0;i < 20;i++){
LinearLayout HLayout = new LinearLayout(this);
for(int j = 0;j < 10;j++){
TextItem item = new TextItem(this);
item.setText(i*10+j + "vh");
item.setBackgroundColor(Color.LTGRAY);
LinearLayout.LayoutParams params = new LayoutParams(100,70);
HLayout.addView(item, params);
}
VLayout.addView(HLayout);
} mItemRoom.addView(VLayout); mVertical = new ScrollView(this);
LinearLayout hlayout = new LinearLayout(this);
LinearLayout vlayout = new LinearLayout(this);
vlayout.setOrientation(LinearLayout.VERTICAL);
for(int i = 0;i < 20;i++){
TextItem item = new TextItem(this);
item.setBackgroundColor(Color.BLUE);
item.setText(i + "v");
LinearLayout.LayoutParams params = new LayoutParams(100,70);
vlayout.addView(item, params);
}
hlayout.addView(vlayout);
hlayout.addView(mItemRoom); mVertical.addView(hlayout); LinearLayout tophlayout = new LinearLayout(this);
mTimeItem = new HScrollView(this, mGestureDetector);
mTimeItem.setListener(this);
LinearLayout layout = new LinearLayout(this);
for(int i = 0;i < 10;i++){
TextItem item = new TextItem(this);
item.setText(i + "h");
item.setBackgroundColor(Color.GREEN);
LinearLayout.LayoutParams params = new LayoutParams(100,70);
layout.addView(item,params);
}
mTimeItem.addView(layout);
TextItem item = new TextItem(this);
item.setBackgroundColor(Color.RED);
LinearLayout.LayoutParams params = new LayoutParams(100,70);
tophlayout.addView(item,params);
tophlayout.addView(mTimeItem); mContain = new LinearLayout(this);
mContain.setOrientation(LinearLayout.VERTICAL);
mContain.addView(tophlayout);
mContain.addView(mVertical);
} private SimpleOnGestureListener mGestureListener = new SimpleOnGestureListener(){ @Override
public boolean onScroll(MotionEvent e1, MotionEvent e2,
float distanceX, float distanceY) {
if(Math.abs(distanceX) > Math.abs(distanceY)) {
return true;
}
return false;
} };
@Override
public void onScrollChanged(HScrollView scroll, int x, int y, int oldx,
int oldy) {
if(scroll == mItemRoom){
mTimeItem.scrollTo(x, y);
}else if(scroll == mTimeItem){
mItemRoom.scrollTo(x, y);
} }
}

※下载地址

http://download.csdn.net/detail/u010785585/8062787

Android双列滑动表格(双表头不动)的更多相关文章

  1. JAVA双列集合HashMap

    HashMap 双列集合HashMap是属于java集合框架3大类接口的Map类,   Map接口储存一组成对的键-值对象,提供key(键)到value(值)的映射.Map中的key不要求有序,不允许 ...

  2. Android 摇一摇之双甩功能

    Android 摇一摇之双甩功能 最近做一个摇一摇的功能 网上相关代码很多 但是这次的需求有点奇葩 要求是摇两次才生效 看起来好像很简单 但真正要做遇到的问题还是很多 时间限制 机型灵敏性 摇动的方式 ...

  3. (10)集合之双列集合Map,HashMap,TreeMap

    Map中的元素是两个对象,一个对象作为键,一个对象作为值.键不可以重复,但是值可以重复. 看顶层共性方法找子类特有对象. Map与Collection在集合框架中属并列存在 Map存储的是键值对 Ma ...

  4. 双列集合Map

    1.双列集合Map,就是存储key-value的键值对. 2.hashMap中键必须唯一,值可以不唯一. 3.主要方法:put添加数据    getKey---通过key获取数据    keySet- ...

  5. Map集合——双列集合

    双列集合<k, v> Map: Map 和 HashMap是无序的: LinkedHashMap是有序的: HashMap & LinkedHashMap: put方法: 其中,可 ...

  6. C#之单列双列集合绑定数据

    ---恢复内容开始--- 1.单列集合绑定方式 davList.DataSource=new BindingList<类型名>(集合名); 2.双列集合绑定方式 BindingSource ...

  7. 双列集合Map的嵌套遍历

    双列集合Map的嵌套使用,例如HashMap中还有一个HashMap,这样的集合遍历起来稍微有点儿复杂.例如一个集合:HashMap<Integer,HashMap<String,Inte ...

  8. java oop 单列 双列 集合, 迭代器 的使用和说明

    一.集合(Collection) (1)集合的由来? 我们学习的是Java -- 面向对象 -- 操作很多对象 -- 存储 -- 容器(数组和StringBuffer) -- 数组 而数组的长度固定, ...

  9. Properties -IO相关的双列集合类

    IO相关的集合类 java.util.Properties集合 extends hashtable(淘汰) Properties类表示了一个持久的属性集.Properties可保存流中或从流中加载 P ...

随机推荐

  1. 暑假集训 || 区间DP

    区间DP 经典石子合并问题V1    复杂度 On3 int a[SZ], sum[SZ], f[SZ][SZ]; int main() { int n; scanf("%d", ...

  2. 第1节 flume:7、flume的监控文件夹,实现数据收集到hdfs上

    1.2.2 采集案例 1.采集目录到HDFS 需求分析 结构示意图: 采集需求:某服务器的某特定目录下,会不断产生新的文件,每当有新文件出现,就需要把文件采集到HDFS中去 根据需求,首先定义以下3大 ...

  3. git命令(使用visual studio)

    拉取,提取,合并 提交到本地 切换分支 创建分支 推送到远端 删除本地分支 删除远程分支

  4. swift中的as?和as!

    as操作符用来把某个实例转型为另外的类型,由于实例转型可能失败,因此Swift为as操作符提供了两种形式:选项形式as?和强制形式as 选项形式(as?)的操作执行转换并返回期望类型的一个选项值,如果 ...

  5. python数组中数据位置交换 -- IndexError: list assignment index out of range

    代码: t = [-10,-3,-100,-1000,-239,1] # 交换 -10和1的位置 t[5], t[t[5]-1] = t[t[5]-1], t[5] 报错: IndexError: l ...

  6. (16) Cloudflare pki公钥基础设施

    该工具组共有8个工具 1.cfssl 常用的可用指令: sign signs a certificate bundle build a certificate bundle genkey genera ...

  7. linux 05

    日期与时间命令:date.日历的命令:cal.计算器:bc  要使用quit退出 在命令行模式里执行命令时,会有两种主要情况: 一种是该命令会直接显示结果然后回到命令提示符等待下一个命令的输入 dat ...

  8. JavaScript:对Object对象的一些常用操作总结

    JavaScript对Object对象的一些常用操作总结. 一.Object.assign() 1.可以用作对象的复制 var obj = { a: 1 }; var copy = Object.as ...

  9. qt 线程简单学习

    QThread线程,只需继承QThread类,并重载run方法,之后就可以使用了. #ifndef THREAD_H #define THREAD_H #include <QThread> ...

  10. day23 01 类的命名空间

    day23  01 类的命名空间 一.初识面向对象复习 定义类: class 函数:方法 动态属性 变量:类属性 静态属性 过程: (1)_init_方法:初始化:def _init_(self,参数 ...