ListView这是在Android中用得比较多的组件了,所以就把比较常用的一种读取SD卡的图片并显示在其上面,进行了一点点整理(比较简单的整理)!!!!记得打开读取SD卡的权限。。。。。。。。。。。。切记
1:读取SD卡中,所有的图片文件
/**
* 初始化
*/
public void initData(){
/**图片对象集合*/
ArrayList<HashMap<String,Object>> picList = new ArrayList();
//查询SD卡所有图片,得到游标
Cursor cursor = getContentResolver().query(Media.EXTERNAL_CONTENT_URI, null, null, null, null);
while(cursor.moveToNext()){
//得到图片的名字
String name = cursor.getString(cursor.getColumnIndex(Media.DISPLAY_NAME));
//得到图片的描述信息
String info = cursor.getString(cursor.getColumnIndex(Media.DESCRIPTION));
//图片数据
byte[] data = cursor.getBlob(cursor.getColumnIndex(Media.DATA));
HashMap map = new HashMap();
map.put("name", name==null ? "":name);
map.put("info", info==null ? "":info);
map.put("data", data);
picList.add(map);
}
cursor.close();
}
//设置适配器
BaseAdapter ba = new BaseAdapter() {
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if(convertView==null){
convertView = getLayoutInflater().inflate(R.layout.listview_item, null);
}
ImageView image = (ImageView) convertView.findViewById(R.id.iv_picture);
TextView nameText = (TextView) convertView.findViewById(R.id.tv_name);
String name = picList.get(position).get("name").toString(); //拿到图片的名字
byte[] bs = (byte[]) picList.get(position).get("data");
//设置图片信息
nameText.setText(name);
//设置图片
Bitmap bitmap = BitmapFactory.decodeFile(new String(bs,0,bs.length-1));
image.setImageBitmap(bitmap);
//设置标识符
image.setTag(position);
list.add(name);
//为图片添加监听
image.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(MainActivity.this, "点击了我!!", 0).show();
}
});
return convertView;
}
@Override
public long getItemId(int arg0) {
return arg0;
}
@Override
public Object getItem(int arg0) {
return arg0;
}
@Override
public int getCount() {
return picList.size();
}
};
//ListView设置显示适配器
lvlist.setAdapter(ba);
第三种:读取SD中某个文件中的所有图片(未知图片的名字形式)
/*
* 就单纯加载某个文件下的图片
*/
private List<Map<String,Object>> getDatas() {
List<Map<String,Object>> list = new ArrayList<Map<String,Object>>();
String sdpath = "";
sdpath = Environment.getExternalStorageDirectory().toString();
sdpath = sdpath; //这里可以设置你要读取文件的路径,我这就是写了SD卡的路径
File file = new File(sdpath);
if (!file.exists()) { //文件不存在
return null;
}
else{
//获取以png为后缀的图片
File[] files = file.listFiles(new FilenameFilter() { // 找到匹配的图片
public boolean accept(File dir, String filename) {
return filename.endsWith(".png");
}
});
//将图片装载到List中,方便ListView进行显示
for (int i = 0; i <files.length; i++) {
Map<String, Object> map = new HashMap<String, Object>();
String imagePath = "/sdcard/"+files[i].getName();
map.put("icon", BitmapFactory.decodeFile(imagePath));
map.put("name", "第 " + i);
list.add(map);
}
return list;
}
}
这后面适配器的设置步骤就和下面的设置的一样就不多介绍了,
第二种:读取SD中某个文件中的图片(已知图片名字的格式,这里是形如aaa1.png格式)
/*
* 就单纯加载某个文件下的图片
*/
private List<Map<String,Object>> getDatas() {
List<Map<String,Object>> list = new ArrayList<Map<String,Object>>();
for (int i=0; i<=15; i++) {
Map<String,Object> map = new HashMap<String,Object>();
String imagePath = "/sdcard/aaa"+i+".png";
map.put("icon", BitmapFactory.decodeFile(imagePath));
map.put("name", "第 "+i);
list.add(map);
}
return list;
}
这一种的缺点就是你已经知道你图片的命名形式,否则就需要用到正则表达式进行匹配也可以的。
final List<Map<String,Object>> listPicture = getDatas();
BaseAdapter pi = new BaseAdapter() {
@Override
public View getView(int arg0, View convertView, ViewGroup arg2) {
if(convertView==null){
convertView = getLayoutInflater().inflate(R.layout.listview_item, null);
}
ImageView image = (ImageView) convertView.findViewById(R.id.iv_picture);
TextView nameText = (TextView) convertView.findViewById(R.id.tv_name);
image.setImageBitmap((Bitmap) listPicture.get(arg0).get("icon"));
nameText.setText((String)(listPicture.get(arg0).get("name")));
return convertView;
}
@Override
public long getItemId(int arg0) {
return arg0;
}
@Override
public Object getItem(int arg0) {
return arg0;
}
@Override
public int getCount() {
return listPicture.size();
}
};
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之家整理,本文链接:https://www.bmabk.com/index.php/post/12454.html