可横屏左右滑动的GridView
来源:互联网 发布:java解压缩gz文件 编辑:程序博客网 时间:2024/05/01 18:05
http://blog.csdn.net/lilu_leo/article/details/7378810
关于屏幕左右滑动,自己以前写过两篇文章:页面滑动切换(类Launcher滑动屏幕实现),launcher修改--左右滑动屏幕切换源码追踪,但是以前有个朋友问如何加个GridView,后来找到这个代码,关于ScrollLayout部分,作者也是修改的launcher的代码,读者可以自己去看代码(下面有下载地址),也可以看下上面两篇文章关于跳转的分析,在这里就不详细解读了。
关键看下他的GridView是如何加载的,在ScrGriActivity中,我们可以看到:
- /**
- * 添加GridView
- */
- private void setGrid() {
- PageCount = (int) Math.ceil(lstDate.size() / PAGE_SIZE);
- if (gridView != null) {
- curPage.removeAllViews();
- }
- for (int i = 0; i < PageCount; i++) {
- gridView = new GridView(ScrGriActivity.this);
- gridView.setAdapter(new DateAdapter(ScrGriActivity.this, lstDate, i));
- gridView.setNumColumns(3);
- gridView.setHorizontalSpacing(8);
- gridView.setVerticalSpacing(8);
- // 去掉点击时的黄色背景
- gridView.setSelector(R.drawable.bg_grid_item);
- gridView.setOnItemClickListener(gridListener);
- curPage.addView(gridView);
- }
- }
我们好好看下:
- gridView.setAdapter(new DateAdapter(ScrGriActivity.this, lstDate, i));
PageCount是根据GridView里面item个数和每页GridView显示的个数计算出来的左右滑动的页数,lstDate是一个ArrayList的数据集。
- /** 数据集. */
- private List<Info> lstDate = new ArrayList<Info>();
在这里,就要看下DateAdapter的定义了,其实比较关键的一点也在于数据的加载。
- package com.adapter;
- import java.util.ArrayList;
- import java.util.List;
- import com.mod.Info;
- import com.qu.R;
- import android.content.Context;
- import android.view.LayoutInflater;
- import android.view.View;
- import android.view.ViewGroup;
- import android.widget.BaseAdapter;
- import android.widget.TextView;
- public class DateAdapter extends BaseAdapter {
- private Context context;
- /** 列表. */
- private List<Info> lstDate;
- /** 名字. */
- private TextView txtName;
- /** 性别. */
- private TextView txtSex;
- /** 年龄. */
- private TextView txtAge;
- // 每页显示的Item个数
- public static final int SIZE = 12;
- public DateAdapter(Context mContext, List<Info> list, int page) {
- this.context = mContext;
- lstDate = new ArrayList<Info>();
- int i = page * SIZE;
- int iEnd = i + SIZE;
- while ((i < list.size()) && (i < iEnd)) {
- lstDate.add(list.get(i));
- i++;
- }
- }
- @Override
- public int getCount() {
- return lstDate.size();
- }
- @Override
- public Object getItem(int position) {
- return lstDate.get(position);
- }
- @Override
- public long getItemId(int position) {
- return position;
- }
- @Override
- public View getView(int position, View convertView, ViewGroup parent) {
- Info user = lstDate.get(position);
- convertView = LayoutInflater.from(context).inflate(R.layout.item, null);
- txtName = (TextView) convertView.findViewById(R.id.txt_userName);
- txtSex = (TextView) convertView.findViewById(R.id.txt_userSex);
- txtAge = (TextView) convertView.findViewById(R.id.txt_userAge);
- txtName.setText(user.getName());
- txtSex.setText("性别:" + user.getSex());
- txtAge.setText("年龄段:" + user.getAge());
- return convertView;
- }
- }
在这里,代码的耦合度有点高,可以把
- private List<Info> lstDate;
换成
- private List<Object> lstDate;
- @Override
- public View getView(int position, View convertView, ViewGroup parent) {
- Info user = lstDate.get(position);
- convertView = LayoutInflater.from(context).inflate(R.layout.item, null);
加上个强制类型转换:
- Info user = (Info)lstDate.get(position);
主要有意思的地方在于他的构造方法:
- public DateAdapter(Context mContext, List<Info> list, int page) {
- this.context = mContext;
- lstDate = new ArrayList<Info>();
- int i = page * SIZE;
- int iEnd = i + SIZE;
- while ((i < list.size()) && (i < iEnd)) {
- lstDate.add(list.get(i));
- i++;
- }
- }
在ScrGriActivity里面构造方法被执行了i次,curPage既自定义的左右滑动控件
- private ScrollLayout curPage;
- for (int i = 0; i < PageCount; i++) {
- gridView = new GridView(ScrGriActivity.this);
- gridView.setAdapter(new DateAdapter(ScrGriActivity.this, lstDate, i));
- gridView.setNumColumns(3);
- gridView.setHorizontalSpacing(8);
- gridView.setVerticalSpacing(8);
- // 去掉点击时的黄色背景
- gridView.setSelector(R.drawable.bg_grid_item);
- gridView.setOnItemClickListener(gridListener);
- curPage.addView(gridView);
- }
我那个朋友是直接仿照页面滑动切换(类Launcher滑动屏幕实现)这个进行的修改,直接在xml里面添加的GridView导致最后设置GridView的点击事件不能被监听。可以参考这个例子实现,另外,这个代码中页面标记做的不太好,可以参考launcher修改--左右滑动屏幕切换源码追踪和页面滑动切换(类Launcher滑动屏幕实现)这两篇里面的页面标记实现一下。
0 0
- 可横屏左右滑动的GridView
- 可横屏左右滑动的GridView
- 可横屏左右滑动的GridView
- 可横屏左右滑动的GridView
- 自定义两行可左右滑动的GridView
- GridView左右滑动的实现(一)
- android gridview左右滑动(二)
- 另一种可左右滑动的横向GridView的实现
- Android 实现item可左右滑动移除的GridView
- 使用RecyclerView实现ListView,GridView的效果(上下,左右滑动),拖拽与滑动删除
- android gridview左右滑动 并能定位
- 实现gridview 分页,左右滑动效果
- Android GridView显示一行,左右滑动
- Android GridView显示一行,左右滑动
- Android GridView显示一行,左右滑动
- ViewPager 和 GridView 结合实现左右滑动
- 左右滑动的SidingMenu
- 左右滑动的Tab
- linux下.o、.a、.so文件解析
- Linux 学习笔记 -- 第四部分 Linux 使用着管理 -- 第15章 磁盘配额 (Quota) 与高级文件系统管理
- MongoDB学习笔记(一) MongoDB介绍及安装
- AMD+WIN8(64位)+VMware10安装MAC OS X10.6.3和Xcode3.2.2【详细】
- Qt5.3.0 for android windows平台下搭建及demo
- 可横屏左右滑动的GridView
- CListBox和CListCtrl练习之求素数
- Linux 学习笔记 -- 第四部分 Linux 使用着管理 -- 第16章 例行性工作 (crontab)
- Debug和Release有什么区别
- native 和 H5 的交互
- Linux 学习笔记 -- 第四部分 Linux 使用着管理 -- 第17章 程序管理与 SELinux 初探
- Sql server 事务的两种用法
- Wince image相关工具
- 黑马——C语言的一些基础(2)