今天小研究了一下GridView,目的是为了实现 下面的效果(GridView多项选择):

首先,在布局文件添加GridView ,创建适配器的items...

具体的都在注释里边了,下面是 程序源码 片段,由于xml文件比较简单,故不在贴出.

MainActivity.java

package com.app.gridview;

import android.os.Bundle;
import android.app.Activity;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.GridView; public class MainActivity extends Activity {
static MainActivity instance;//实例
GridView gridView1;//声明对象
MyGridViewAdapter adapter;//声明适配器 @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
instance =this;
//获得组件
gridView1 =(GridView) findViewById(R.id.gridView1);
gridView1.setNumColumns(2);
//获得适配器
adapter = new MyGridViewAdapter(instance);
//设置适配器到组件
gridView1.setAdapter(adapter);
//添加监听
gridView1.setOnItemClickListener(new OnItemClickListener() { @Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
//更改显示
adapter.changeState(position);
}
});
}
}

自定义适配器 MyGridViewAdapter.java

package com.app.gridview;

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.graphics.drawable.LayerDrawable;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.GridView;
import android.widget.ImageView; public class MyGridViewAdapter extends BaseAdapter {
Context context;
boolean isCheck;// 选中
Boolean boo[] = {false, false, false, false, false}; int imgsid[] = {R.drawable.aa_badge_ad, R.drawable.aa_badge_award,
R.drawable.aa_badge_exclusive, R.drawable.aa_badge_gift,
R.drawable.aa_badge_new,};
public MyGridViewAdapter(Context context) {
this.context = context;
isCheck = false;
} @Override
public int getCount() {
return imgsid.length;
} @Override
public Object getItem(int position) {
return imgsid[position];
} @Override
public long getItemId(int position) {
return position;
} @Override
public View getView(int position, View convertView, ViewGroup parent) {
ImageView imageView;
if (convertView == null) {
imageView = new ImageView(context);
imageView.setLayoutParams(new GridView.LayoutParams(200, 200));// 设置ImageView对象布局
imageView.setAdjustViewBounds(false);// 设置边界对齐
imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);// 设置刻度的类型
imageView.setPadding(8, 8, 8, 8);// 设置间距
} else {
imageView = (ImageView) convertView;
}
imageView.setImageDrawable(makeBmp(imgsid[position], boo[position]));
// imageView.setImageResource(imgsid[position]);//为ImageView设置图片资源
return imageView;
} private LayerDrawable makeBmp(int id, boolean isChosen) {
Bitmap bitmap = ((BitmapDrawable) context.getResources()
.getDrawable(id)).getBitmap(); // 根据isChosen来选取对勾的图片
Bitmap seletedBmp;
if (isChosen == true) {
seletedBmp = BitmapFactory.decodeResource(context.getResources(),
R.drawable.btncheck_yes);
} else {
seletedBmp = BitmapFactory.decodeResource(context.getResources(),
R.drawable.btncheck_no);
} // 使 Drawable叠加层(合成图片)
Drawable[] array = new Drawable[2];
array[0] = new BitmapDrawable(bitmap);
array[1] = new BitmapDrawable(seletedBmp);
// 层图形对象
LayerDrawable mLayerDrawable = new LayerDrawable(array);// 参数为上面的Drawable数组
/*
* Specify modifiers to the bounds for the drawable[index].索引号 left += l
* top += t; right -= r; bottom -= b;
*/
mLayerDrawable.setLayerInset(0, 0, 0, 0, 0); // 第一个参数0代表数组的第一个元素
mLayerDrawable.setLayerInset(1, 88, 0, 0, 88);// 第一个参数1代表数组的第二个元素
return mLayerDrawable; // 返回合成后的图
}
/*
* 被点击的时候调用,改变点击后的状态
*/
public void changeState(int position) { if (isCheck == false) {
if (position < boo.length) {
boo[position] = !boo[position];
isCheck = !isCheck;
}
} else {
if (position < boo.length) {
boo[position] = !boo[position];
isCheck = !isCheck;
}
}
// 调用适配器的更新状态方法
notifyDataSetChanged();
}
}

android GridView 的使用 实现多项选择的更多相关文章

  1. Android中的AlertDialog使用示例四(多项选择确定对话框)

    在Android开发中,我们经常会需要在Android界面上弹出一些对话框,比如询问用户或者让用户选择.这些功能我们叫它Android Dialog对话框,AlertDialog实现方法为建造者模式. ...

  2. android gridview布局,实现长按某一个,所有项都显示删除的图标

    最近一直忙着项目开发,有段时间没有写博文了,今天想跟大家分享的是长按gridview中的某一项显示删除图标,此时点击某项便可删除,再长按取消删除图标. gridview的布局文件如下: <?xm ...

  3. 阅读《Android 从入门到精通》(9)——多项选择

    多项选择(CheckBox) CheckBox 类是 Button 的子类,层次关系例如以下: android.widget.Button android.widget.CompoundButton ...

  4. 第十六篇-使用CheckBox实现多项选择

    话不多说,先上效果图 屏幕截图方法,全屏截图按键盘print screen就行,活动窗口截图,按住ALT+print screen. 图片默认保存在home/picture路径下.可以通过自带的图片处 ...

  5. 单项选择RadioButton和多项选择CheckBox的使用

     在Android中,可以通过RadioButton和RadioGroup的组合来实现单项选择的效果.而多项选择则是通过CheckBox来实现的. 1.单项选择RadioButton 我们知道,一 ...

  6. Android——GridView(网格视图)相关知识总结贴

    Android API中文文档GridView http://www.apkbus.com/android-14131-1-1.html   Android API 中文 (15) —— GridVi ...

  7. WPF 多项选择下拉菜单

    背景 项目中有一个多项选择筛选的功能, 由于筛选条件太多, 用户又习惯在平板上进行操作, 所以要求我们把checkbox 放到一个combobox里面, 然后checkbox的选项要在combobox ...

  8. iOS开发——UI篇OC篇&UITableView多项选择

    UITableView多项选择 自定义cell和取到相应的cell就行了 TableViewCell.h #import <UIKit/UIKit.h> @interface TableV ...

  9. Android GridView增加HeaderView和FooterView的实现

    Android GridView增加HeaderView和FooterView的实现 做的项目中遇到一个问题,需要实现一个页面 页面的上面是一个自定义的View和GridView,当向下滚动屏幕的时候 ...

随机推荐

  1. Luogu3164 CQOI2014 和谐矩阵 异或高斯消元

    传送门 题意:给出$N,M$,试构造一个$N \times M$的非全$0$矩阵,其中所有格子都满足:它和它上下左右四个格子的权值之和为偶数.$N , M \leq 40$ 可以依据题目中的条件列出有 ...

  2. Vue-Vue组件的注册和使用

    全局注册: 要注册一个全局组件,可以使用 Vue.component(tagName, options). 注意确保在初始化根实例之前注册组件: html代码: <div id="ex ...

  3. (转)linux sudo 重定向,实现只有系统管理员才有权限操作的文件中写入信息

    众所周知,使用 echo 并配合命令重定向是实现向文件中写入信息的快捷方式. 本文介绍如何将 echo 命令与 sudo 命令配合使用,实现向那些只有系统管理员才有权限操作的文件中写入信息.   比如 ...

  4. WebApi系列~HttpClient的性能隐患 - 转

    最近在进行开发过程中,基于都是接口开发,A站接口访问B接口接口来请求数据,而在这个过程中我们使用的是HttpClient这个框架,当然也是微软自己的框架,性能当前没有问题,但如果你直接使用官方的写法, ...

  5. Luogu P4211 [LNOI2014]LCA

    我去这道题的Luogu评级是假的吧,这都算黑题. 我们首先考虑把操作离线不强制在线的题目离线一下一般都要方便些 考虑差分,我们用\(f(x)\)表示\([1,x]\)之间的点与\(z\)的答案,那么显 ...

  6. C#使用FFMPEG推流,并且获取流保存在本地,随时取媒体进行播放!

    最近开发了基于C#的推流器一直不大理想,终于在不懈努力之后研究了一点成果,这边做个笔记:本文着重在于讲解下如何使用ffmpeg进行简单的推流,看似简单几行代码没有官方的文档很吃力.并获取流的源代码:如 ...

  7. 对我们最常用的软件QQ的看法

    QQ聊天软件是我使用的第一款聊天软件,早在我上小学6年级的时候就开始接触这款软件了,可以说是陪伴我最久的一款软件. 相对于其他的聊天软件,QQ更加的方便,使用简单,界面也好操作,所以我爱上了这款软件. ...

  8. 《Gogoing》Alpha版会议总结

    一.开会的过程 首先大家对自己的任务进行了汇报,然后大家就当前最需要解决的问题提出解决方案,最后相互鼓励,相互帮助,探讨下一步该怎么做. 二.讨论的问题 百度地图API代码和界面代码为什么对接不上? ...

  9. 3-palindrome CodeForces - 805B (思维)

    In the beginning of the new year Keivan decided to reverse his name. He doesn't like palindromes, so ...

  10. Spring MVC静态资源处理(转)

    原文地址: http://www.cnblogs.com/fangqi/archive/2012/10/28/2743108.html 优雅REST风格的资源URL不希望带 .html 或 .do 等 ...