public CellAdapter(Context c) {
mContext = c;
mInflater = LayoutInflater.from(c);
}
public int getCount() {
return (disp_rows * COLUMN_CNT); //行数x列数为一共要显示多少个格子
}
public Object getItem(int position) {
return null; //do nothing now
}
public long getItemId(int position) {
return 0;
}
// create a new ImageView for each item referenced by the Adapter
// ImageView 放在了自定义的格子排版文件中,可以扩展使用,也就是说,格子显示的内容可以自己扩展
@Override
public View getView(int position, View convertView, ViewGroup parent) {
int row = getRow(position); //获取该格子对应表格的行和列
int column = getColumn(position);
ImageView imageView;
if (convertView == null) {
convertView = mInflater.inflate(R.layout.imagecell, null);
//这里也可以不用自己定义的imagecell排版,而直接使用如TextView 或 ImageView等作为一个格子的显示,这里演示自定义排版是为了扩展使用
//imageView = new ImageView(mContext); //直接使用ImageView
} //重用View,提高性能 else {
// imageView = (ImageView) convertView; //直接使用ImageView时
}
imageView = (ImageView) convertView.findViewById(R.id.CellImage); //如果直接使用ImageView,这一行不要
imageView.setBackgroundColor(Color.BLACK);
imageView.setImageResource(R.drawable.cellimage);
imageView.refreshDrawableState();
return convertView;
}
private final int getRow(int position) {
return (position / COLUMN_CNT);
}
private final int getColumn(int position) {
return (position % COLUMN_CNT);
}
}
}
以上即可实现利用GridView实现二维表格效果,性能也不错,而且有垂直和水平均有滚动条。
优点:性能好,可以利用自定义Layout作为每个格子的显示,同时可以进一步扩展CellAdapter 的getView方法,根据convertView instanceOf ImageView 或 TextView实现有的格子里显示文本,有的格子里显示图片, 从而达到图片和文字同时显示的效果。
缺点: 每个格子的大小必须相同,同时显示图片和文字时,比较难调整显示效果,当然有耐心的同学可以试试,理论上可以做到图文同时显示,而且支持不同格子的大小显示(即有的格子显示大,有的格子显示小,根据格子显示的内容动态的显示格子的大小),搞出来的同学请告知我一声,我学习学习。