Android--------多条目展示数据(一种类型只有一个图片,另一种有两个图片)将图片缓存到SD卡
2017-06-26 19:57
423 查看
首先布局: item1(只有一个图片的)
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="horizontal" > <ImageView android:id="@+id/image_view1" android:layout_width="200dp" android:layout_height="200dp" /> <LinearLayout android:layout_width="190dp" android:layout_height="200dp" android:orientation="vertical" > <TextView android:id="@+id/title1" android:layout_width="190dp" android:layout_height="100dp" android:text="fdsdfsd"/> <TextView android:id="@+id/id1" android:layout_width="190dp" android:layout_height="100dp" android:text="fdsdfsd"/> </LinearLayout> </LinearLayout> item2(有两个图片的)
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <LinearLayout android:layout_width="match_parent" android:layout_height="200dp" android:orientation="horizontal"> <ImageView android:id="@+id/image_view2" android:layout_width="0dp" android:layout_height="200dp" android:layout_weight="1"/> <ImageView android:id="@+id/image_view22" android:layout_width="0dp" android:layout_height="200dp" android:layout_weight="1"/> </LinearLayout> <TextView android:id="@+id/title2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="ssssssss"/> </LinearLayout> 题目要求:根据type等于1,item显示一张图片,type等于2,item显示两张图片,图片路径根据 pic 中的 “|” 分割
适配器类(多条目展示,并用imageLoader加载图片,缓存到SD卡)
public class Myadapter extends BaseAdapter { private ArrayList<News.ListBean> mlist; private Context mcontext; //定义样式常量,注意常量值要从0开始 private final int type1=0; private final int type2=1; private ImageLoader imageloader; private DisplayImageOptions options; public Myadapter(Context mcontext,ArrayList<News.ListBean> list) { this.mcontext = mcontext; this.mlist=list; //创建默认的ImageLoader配置参数 // ImageLoaderConfiguration configuration = ImageLoaderConfiguration // .createDefault(mcontext); //将configuration配置到imageloader中 imageloader= ImageLoader.getInstance(); //设置缓存到SD路径 File file=new File(Environment.getExternalStorageDirectory(),"HAHA"); if (!file.exists()){ file.mkdirs(); } ImageLoaderConfiguration con=new ImageLoaderConfiguration.Builder(mcontext) .diskCache(new UnlimitedDiskCache(file)) .build(); imageloader.init(con); options=new DisplayImageOptions.Builder() .cacheInMemory(true) .cacheOnDisk(true) .bitmapConfig(Bitmap.Config.ARGB_8888) .showImageOnLoading(R.mipmap.ic_launcher) .showImageForEmptyUri(R.mipmap.ic_launcher) .showImageOnFail(R.mipmap.ic_launcher) .build(); /* DisplayImageOptions options = new DisplayImageOptions.Builder() .showImageOnLoading(R.drawable.ic_stub) //加载图片时的图片 .showImageForEmptyUri(R.drawable.ic_empty) //没有图片资源时的默认图片 .showImageOnFail(R.drawable.ic_error) //加载失败时的图片 .cacheInMemory(true) //启用内存缓存 .cacheOnDisk(true) //启用外存缓存 .considerExifParams(true) //启用EXIF和JPEG图像格式 .displayer(new RoundedBitmapDisplayer(20)) //设置显示风格这里是圆角矩形 .build(); */ //加载图片最重要的一行代码 // imageloader.displayImage(bean.getImgSrc(),holder.image,options); } //手动重写的方法 @Override public int getItemViewType(int position) { // return super.getItemViewType(position); //获得类型 type2为有两个图片的那种类型 type1为一个图片的类型 // return mlist.get(position).getType()==1?type1:type2; } //手动重写的方法 @Override public int getViewTypeCount() { return 2; } @Override public int getCount() { return mlist==null?0:mlist.size(); } @Override public Object getItem(int position) { return mlist.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder vh; int type = getItemViewType(position); //对convertView进行判空 if (convertView==null){ vh=new ViewHolder(); //对类型的分类 if (type==type1) { //类型一为只有一个图片的情况,选中布局为item1,并找到该布局中的ID convertView = View.inflate(mcontext, R.layout.item1, null); vh.title = (TextView) convertView.findViewById(R.id.title1); vh.id = (TextView) convertView.findViewById(R.id.id1); vh.iv = (ImageView) convertView.findViewById(R.id.image_view1); }else if(type==type2) { //类型二是文字和两个图片的情况,选中布局为item2,并找到该布局中的ID convertView = View.inflate(mcontext, R.layout.item2, null); vh.title = (TextView) convertView.findViewById(R.id.title2); vh.iv = (ImageView) convertView.findViewById(R.id.image_view2); vh.iv1=(ImageView)convertView.findViewById(R.id.image_view22); } //设置标签 convertView.setTag(vh); }else{ //得到标签 vh=(ViewHolder)convertView.getTag(); } //得到该类,当是类型2的时候加载图片, News.ListBean news = mlist.get(position); //如果是两个图片的类型首先得到图片,然后拆分字符串最后用imageloader加载图片 if (type==type2) { vh.title.setText(news.getTitle()); String pic= news.getPic(); String[] urls = pic.split("\\|"); if (urls.length>=2){ imageloader.displayImage(urls[0],vh.iv,options); imageloader.displayImage(urls[1],vh.iv1,options); } // Glide.with(mcontext).load(news.getPic()).into(vh.iv); // Glide.with(mcontext).load(news.getPic()).into(vh.iv1); }else if (type==type1){ vh.title.setText(news.getTitle()); vh.id.setText(news.getId()+""); // Glide.with(mcontext).load(news.getPic()).into(vh.iv); imageloader.displayImage(news.getPic(),vh.iv,options); } return convertView; } class ViewHolder{ ImageView iv,iv1; TextView title; TextView id; } }
---------------------------------------------------------------------------------------------------
点击listview条目弹出对话框显示点击条目的信息
//xlistview条目的点击事件 mxv.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { //因为点击后显示一个图片,所以自己写一个图片的布局 imageload,找到id View v = View.inflate(MainActivity.this, R.layout.imageload, null); ImageView iv=(ImageView)v.findViewById(R.id.imageload); if (position>0&&position<mlist.size()){ Glide.with(MainActivity.this).load(mlist.get(position-1).getPic()).into(iv); } AlertDialog.Builder builder=new AlertDialog.Builder(MainActivity.this) .setView(v) .setPositiveButton("确定", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); } }) .setNegativeButton("取消", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); } }); builder.create().show(); } });
相关文章推荐
- 【Java/Android性能优 6】Android 图片SD卡缓存 使用简单 支持预取 支持多种缓存算法 支持不同网络类型 支持序列化
- Android 图片SD卡缓存 使用简单 支持预取 支持多种缓存算法 支持不同网络类型 支持序列化
- 【Java/Android性能优 6】Android 图片SD卡缓存 使用简单 支持预取 支持多种缓存算法 支持不同网络类型 支持序列化
- Android 图片SD卡缓存 使用简单 支持预取 支持多种缓存算法 支持不同网络类型 支持序列化 (八)
- Android Jamendo开源在线音乐播放器源码分析七 数据缓存和图片缓存的分析
- android上的一个网络接口和图片缓存框架enif简析
- Android 应用开发 之使用LruCache和DiskLruCache来在内存和SD卡中缓存图片
- 一个使用泛型堆栈模块创建的两个容纳不同类型数据的实例
- 妙用union和enum实现只有一个数据成员的类可存储不同的类型
- Android 应用开发 之使用LruCache和DiskLruCache来在内存和SD卡中缓存图片
- Android异步加载图片并缓存到内存和SD卡上
- 举例说明android中写一个内部类来选择文件夹中指定的图片类型
- Android_遍历SD卡中某一路径下指定类型的图片
- Android listview异步加载图片(线程池,内存缓存,SD卡缓存)优化显示
- android中写一个内部类来选择文件夹中指定的图片类型实例说明
- Android中ImageSwitcher结合Gallery展示SD卡中的资源图片
- 只有一种数据类型
- Android ImageCache图片缓存,使用简单,支持预取,支持多种缓存算法,支持不同网络类型,扩展性强
- android 优化那些事之图片缓存设计/如何高效的展示图片(三)
- Android 异步加载图片,使用LruCache和SD卡或手机缓存,效果非常的流畅