1.项目中要完成一个类似ireader书架页面,没能从新自定控件,就用了listview来实现,效果如下:
2.实现方式:
1》加载布局文件
/* 所有课程的视图 */
public void goToAllCoursesView() {
setContentView(R.layout.home);
this.commonView("所有课程", HOME_VIEW, R.id.home_page, null);
ListView lv_all_courses = (ListView) findViewById(R.id.lv_all_courses);
AllCoursesAdapter aclAdapter = new AllCoursesAdapter(HomeActivity.this, TestData.all_courses_image,new KindOfOnclickListener() {
public void mOnClick(HashMap<String, Object> params) {// item中控件的事件响应
int image_src = (Integer) params.get("image_src");
if (image_src==R.drawable.course_gccl) {
Log.d("course", "这是工程测量课程-->" + R.drawable.course_gccl);
commonParams = new HashMap<String, Object>();
commonParams.put("course_name", "工程测量");
commonSendMessage(COURSE_DETAIL_VIEW, commonParams);
}
}
});
lv_all_courses.setAdapter(aclAdapter);
aclAdapter.notifyDataSetChanged();
}
2》listview的adapter:
public class AllCoursesAdapter extends BaseAdapter{
private Context context;
private int[] all_course_image;
private int rows = 0;
private KindOfOnclickListener mOnclickListener;
private ImageView course01, course02, course03, course04, course05;
public AllCoursesAdapter(Context context, int[] all_course_image, KindOfOnclickListener mOnclickListener) {
this.context = context;
this.all_course_image = all_course_image;
this.mOnclickListener = mOnclickListener;
rows = (all_course_image.length % TestData.one_row_items == 0 ? all_course_image.length / TestData.one_row_items : all_course_image.length / TestData.one_row_items + 1);
}
public int getCount() {
return rows;
}
public Object getItem(int position) {
// TODO Auto-generated method stub
return null;
}
public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
}
public View getView(final int position, View convertView, ViewGroup parent) {
if (convertView == null) {
convertView = LayoutInflater.from(context).inflate(R.layout.course_item, null);
}
Log.i("position", "position-->" + position + "----rows-->" + rows);
course01 = (ImageView) convertView.findViewById(R.id.iv_01);
course02 = (ImageView) convertView.findViewById(R.id.iv_02);
course03 = (ImageView) convertView.findViewById(R.id.iv_03);
course04 = (ImageView) convertView.findViewById(R.id.iv_04);
course05 = (ImageView) convertView.findViewById(R.id.iv_05);
final HashMap<String, Object> params = new HashMap<String, Object>();
course01.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
params.put("image_src", all_course_image[position * TestData.one_row_items + 0]);
mOnclickListener.mOnClick(params);
}
});
course02.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
params.put("image_src", all_course_image[position * TestData.one_row_items +1]);
mOnclickListener.mOnClick(params);
}
});
course03.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
params.put("image_src", all_course_image[position * TestData.one_row_items +2]);
mOnclickListener.mOnClick(params);
}
});
course04.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
params.put("image_src", all_course_image[position * TestData.one_row_items +3]);
mOnclickListener.mOnClick(params);
}
});
course05.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
params.put("image_src", all_course_image[position * TestData.one_row_items +4]);
mOnclickListener.mOnClick(params);
}
});
if (position < rows - 1) {
Log.i("position", "该行填满5本书");
commonHandler(position);
} else {// 最后一行
if (all_course_image.length % TestData.one_row_items == 0) {// 如果正好整除
Log.i("position", "最后一行是5本书");
commonHandler(position);
} else {// 如果不是整除的
int yushu = all_course_image.length - position * TestData.one_row_items;
Log.i("position", "最后一行是" + yushu + "本书");
showImage(yushu, position);
}
}
return convertView;
}
/* Listview一行刚好被填满的处理 */
private void commonHandler(int position) {
int index = 0;
course01.setVisibility(View.VISIBLE);
course02.setVisibility(View.VISIBLE);
course03.setVisibility(View.VISIBLE);
course04.setVisibility(View.VISIBLE);
course05.setVisibility(View.VISIBLE);
course01.setImageResource(all_course_image[position * TestData.one_row_items + index]);
index++;
course02.setImageResource(all_course_image[position * TestData.one_row_items + index]);
index++;
course03.setImageResource(all_course_image[position * TestData.one_row_items + index]);
index++;
course04.setImageResource(all_course_image[position * TestData.one_row_items + index]);
index++;
course05.setImageResource(all_course_image[position * TestData.one_row_items + index]);
index = 0;
}
/* Listview一行没有被填满的处理 */
private void showImage(int yushu, int position) {
switch (yushu) {
case 1:
course01.setVisibility(View.VISIBLE);
course01.setImageResource(all_course_image[position * TestData.one_row_items + 0]);
break;
case 2:
course01.setVisibility(View.VISIBLE);
course02.setVisibility(View.VISIBLE);
course01.setImageResource(all_course_image[position * TestData.one_row_items + 0]);
course02.setImageResource(all_course_image[position * TestData.one_row_items + 1]);
break;
case 3:
course01.setVisibility(View.VISIBLE);
course02.setVisibility(View.VISIBLE);
course03.setVisibility(View.VISIBLE);
course01.setImageResource(all_course_image[position * TestData.one_row_items + 0]);
course02.setImageResource(all_course_image[position * TestData.one_row_items + 1]);
course03.setImageResource(all_course_image[position * TestData.one_row_items + 2]);
break;
case 4:
course01.setVisibility(View.VISIBLE);
course02.setVisibility(View.VISIBLE);
course03.setVisibility(View.VISIBLE);
course04.setVisibility(View.VISIBLE);
course01.setImageResource(all_course_image[position * TestData.one_row_items + 0]);
course02.setImageResource(all_course_image[position * TestData.one_row_items + 1]);
course03.setImageResource(all_course_image[position * TestData.one_row_items + 2]);
course04.setImageResource(all_course_image[position * TestData.one_row_items + 3]);
break;
}
}
}
3》控件响应事件的回调接口:
public interface KindOfOnclickListener {
public void mOnClick(HashMap<String, Object> params);
}