ListView横向滑动

来源:互联网 发布:2.5次元测量仪编程步骤 编辑:程序博客网 时间:2024/05/20 18:16

下载路径:http://download.csdn.net/detail/menglele1314/8593411

这个例子是通过(ListView + HorizontalScrollView)实现的

效果图:

 

 

Activity代码代码  收藏代码
  1. /**  
  2.  *   
  3.  * 带滑动表头与固定列的ListView  
  4.  */  
  5. public class HListActivity extends Activity{  
  6.      private ListView mListView;  
  7.      //方便测试,直接写的public   
  8.      public HorizontalScrollView mTouchView;  
  9.      //装入所有的HScrollView  
  10.      protected List<CHScrollView> mHScrollViews =new ArrayList<CHScrollView>();  
  11.       
  12.     @Override  
  13.     protected void onCreate(Bundle savedInstanceState) {  
  14.         super.onCreate(savedInstanceState);  
  15.         setContentView(R.layout.scroll);  
  16.         initViews();  
  17.     }  
  18.       
  19.     private void initViews() {  
  20.         List<Map<String, String>> datas = new ArrayList<Map<String,String>>();  
  21.         Map<String, String> data = null;  
  22.         CHScrollView headerScroll = (CHScrollView) findViewById(R.id.item_scroll_title);  
  23.         //添加头滑动事件   
  24.         mHScrollViews.add(headerScroll);  
  25.         mListView = (ListView) findViewById(R.id.scroll_list);  
  26.         for(int i = 0; i < 100; i++) {  
  27.             data = new HashMap<String, String>();  
  28.             data.put("title""Title_" + i);  
  29.             data.put("data_" + 1"Date_" + 1 + "_" +i );  
  30.             data.put("data_" + 2"Date_" + 2 + "_" +i );  
  31.             data.put("data_" + 3"Date_" + 3 + "_" +i );  
  32.             data.put("data_" + 4"Date_" + 4 + "_" +i );  
  33.             data.put("data_" + 5"Date_" + 5 + "_" +i );  
  34.             data.put("data_" + 6"Date_" + 6 + "_" +i );  
  35.             datas.add(data);  
  36.         }  
  37.         SimpleAdapter adapter = new ScrollAdapter(this, datas, R.layout.item  
  38.                             , new String[] { "title""data_1""data_2""data_3""data_4""data_5""data_6", }  
  39.                             , new int[] { R.id.item_title   
  40.                                         , R.id.item_data1  
  41.                                         , R.id.item_data2  
  42.                                         , R.id.item_data3  
  43.                                         , R.id.item_data4  
  44.                                         , R.id.item_data5  
  45.                                         , R.id.item_data6 });  
  46.         mListView.setAdapter(adapter);  
  47.     }  
  48.       
  49.     public void addHViews(final CHScrollView hScrollView) {  
  50.         if(!mHScrollViews.isEmpty()) {  
  51.             int size = mHScrollViews.size();  
  52.             CHScrollView scrollView = mHScrollViews.get(size - 1);  
  53.             final int scrollX = scrollView.getScrollX();  
  54.             //第一次满屏后,向下滑动,有一条数据在开始时未加入  
  55.             if(scrollX != 0) {  
  56.                 mListView.post(new Runnable() {  
  57.                     @Override  
  58.                     public void run() {  
  59.                         //当listView刷新完成之后,把该条移动到最终位置  
  60.                         hScrollView.scrollTo(scrollX, 0);  
  61.                     }  
  62.                 });  
  63.             }  
  64.         }  
  65.         mHScrollViews.add(hScrollView);  
  66.     }  
  67.       
  68.     public void onScrollChanged(int l, int t, int oldl, int oldt){  
  69.         for(CHScrollView scrollView : mHScrollViews) {  
  70.             //防止重复滑动  
  71.             if(mTouchView != scrollView)  
  72.                 scrollView.smoothScrollTo(l, t);  
  73.         }  
  74.     }  
  75.       
  76.     class ScrollAdapter extends SimpleAdapter {  
  77.   
  78.         private List<? extends Map<String, ?>> datas;  
  79.         private int res;  
  80.         private String[] from;  
  81.         private int[] to;  
  82.         private Context context;  
  83.         public ScrollAdapter(Context context,  
  84.                 List<? extends Map<String, ?>> data, int resource,  
  85.                 String[] from, int[] to) {  
  86.             super(context, data, resource, from, to);  
  87.             this.context = context;  
  88.             this.datas = data;  
  89.             this.res = resource;  
  90.             this.from = from;  
  91.             this.to = to;  
  92.         }  
  93.           
  94.         @Override  
  95.         public View getView(int position, View convertView, ViewGroup parent) {  
  96.             View v = convertView;  
  97.             if(v == null) {  
  98.                 v = LayoutInflater.from(context).inflate(res, null);  
  99.                 //第一次初始化的时候装进来  
  100.                 addHViews((CHScrollView) v.findViewById(R.id.item_scroll));  
  101.                 View[] views = new View[to.length];  
  102.                 for(int i = 0; i < to.length; i++) {  
  103.                     View tv = v.findViewById(to[i]);;  
  104.                     tv.setOnClickListener(clickListener);  
  105.                     views[i] = tv;  
  106.                 }  
  107.                 v.setTag(views);  
  108.             }  
  109.             View[] holders = (View[]) v.getTag();  
  110.             int len = holders.length;  
  111.             for(int i = 0 ; i < len; i++) {  
  112.                 ((TextView)holders[i]).setText(this.datas.get(position).get(from[i]).toString());  
  113.             }  
  114.             return v;  
  115.         }  
  116.     }  
  117.       
  118.     //测试点击的事件   
  119.     protected View.OnClickListener clickListener = new View.OnClickListener() {  
  120.         @Override  
  121.         public void onClick(View v) {  
  122.             Toast.makeText(HListActivity.this, ((TextView)v).getText(), Toast.LENGTH_SHORT).show();  
  123.         }  
  124.     };  
  125. }  

 

滑动view代码  收藏代码
  1. /**  
  2. * 滑动代码  
  3. */  
  4. public class CHScrollView extends HorizontalScrollView {  
  5.       
  6.     HListActivity activity;  
  7.       
  8.     public CHScrollView(Context context, AttributeSet attrs, int defStyle) {  
  9.         super(context, attrs, defStyle);  
  10.         activity = (HListActivity) context;  
  11.     }  
  12.   
  13.       
  14.     public CHScrollView(Context context, AttributeSet attrs) {  
  15.         super(context, attrs);  
  16.         activity = (HListActivity) context;  
  17.     }  
  18.   
  19.     public CHScrollView(Context context) {  
  20.         super(context);  
  21.         activity = (HListActivity) context;  
  22.     }  
  23.       
  24.     @Override  
  25.     public boolean onTouchEvent(MotionEvent ev) {  
  26.         //进行触摸赋值  
  27.         activity.mTouchView = this;  
  28.         return super.onTouchEvent(ev);  
  29.     }  
  30.       
  31.     @Override  
  32.     protected void onScrollChanged(int l, int t, int oldl, int oldt) {  
  33.         //当当前的CHSCrollView被触摸时,滑动其它  
  34.         if(activity.mTouchView == this) {  
  35.             activity.onScrollChanged(l, t, oldl, oldt);  
  36.         }else{  
  37.             super.onScrollChanged(l, t, oldl, oldt);  
  38.         }  
  39.     }  
  40. }
0 0
原创粉丝点击