package com.andbase.demo.adapter; import java.io.File; import java.util.List; import android.content.Context; import android.graphics.Bitmap; import android.view.Gravity; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.ImageView; import android.widget.ImageView.ScaleType; import android.widget.LinearLayout; import android.widget.RelativeLayout; import com.ab.cache.image.AbImageBaseCache; import com.ab.image.AbImageLoader; import com.ab.util.AbFileUtil; import com.ab.util.AbImageUtil; import com.ab.util.AbStrUtil; import com.andbase.R; // TODO: Auto-generated Javadoc /** * 适配器 网络URL的图片. */ public class ImageShowAdapter extends BaseAdapter { /** The m context. */ private Context mContext; /** The m image paths. */ private List<String> mImagePaths = null; /** The m width. */ private int mWidth; /** The m height. */ private int mHeight; //图片下载器 private AbImageLoader mAbImageLoader = null; /** * Instantiates a new ab image show adapter. * @param context the context * @param imagePaths the image paths * @param width the width * @param height the height */ public ImageShowAdapter(Context context,List<String> imagePaths,int width,int height) { mContext = context; this.mImagePaths = imagePaths; this.mWidth = width; this.mHeight = height; //图片下载器 mAbImageLoader = new AbImageLoader(mContext); } /** * 描述:获取数量. * * @return the count * @see android.widget.Adapter#getCount() */ public int getCount() { return mImagePaths.size(); } /** * 描述:获取索引位置的路径. * * @param position the position * @return the item * @see android.widget.Adapter#getItem(int) */ public Object getItem(int position) { return mImagePaths.get(position); } /** * 描述:获取位置. * * @param position the position * @return the item id * @see android.widget.Adapter#getItemId(int) */ public long getItemId(int position) { return position; } /** * 描述:显示View. * * @param position the position * @param convertView the convert view * @param parent the parent * @return the view * @see android.widget.Adapter#getView(int, android.view.View, android.view.ViewGroup) */ public View getView(int position, View convertView, ViewGroup parent) { final ViewHolder holder; if(convertView == null){ holder = new ViewHolder(); LinearLayout mLinearLayout = new LinearLayout(mContext); RelativeLayout mRelativeLayout = new RelativeLayout(mContext); ImageView mImageView1 = new ImageView(mContext); mImageView1.setScaleType(ScaleType.FIT_CENTER); ImageView mImageView2 = new ImageView(mContext); mImageView2.setScaleType(ScaleType.FIT_CENTER); holder.mImageView1 = mImageView1; holder.mImageView2 = mImageView2; LinearLayout.LayoutParams lp1 = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.FILL_PARENT, ViewGroup.LayoutParams.FILL_PARENT); lp1.gravity = Gravity.CENTER_HORIZONTAL|Gravity.CENTER_VERTICAL; RelativeLayout.LayoutParams lp2 = new RelativeLayout.LayoutParams(mWidth,mHeight); lp2.addRule(RelativeLayout.CENTER_HORIZONTAL,RelativeLayout.TRUE); lp2.addRule(RelativeLayout.CENTER_VERTICAL,RelativeLayout.TRUE); mRelativeLayout.addView(mImageView1,lp2); mRelativeLayout.addView(mImageView2,lp2); mLinearLayout.addView(mRelativeLayout,lp1); convertView = mLinearLayout; convertView.setTag(holder); }else{ holder = (ViewHolder) convertView.getTag(); } holder.mImageView1.setImageBitmap(null); holder.mImageView2.setBackgroundDrawable(null); String imagePath = mImagePaths.get(position); if(!AbStrUtil.isEmpty(imagePath)){ //从缓存中获取图片,很重要否则会导致页面闪动 Bitmap bitmap = AbImageBaseCache.getInstance().getBitmap(imagePath); //缓存中没有则从网络和SD卡获取 if(bitmap == null){ holder.mImageView1.setImageResource(R.drawable.image_loading); if(imagePath.indexOf("http://")!=-1){ //图片的下载 mAbImageLoader.display(holder.mImageView1,imagePath,this.mWidth,this.mHeight); }else if(imagePath.indexOf("/")==-1){ //索引图片 try { int res = Integer.parseInt(imagePath); holder.mImageView1.setImageDrawable(mContext.getResources().getDrawable(res)); } catch (Exception e) { holder.mImageView1.setImageResource(R.drawable.image_error); } }else{ Bitmap mBitmap = AbFileUtil.getBitmapFromSD(new File(imagePath), AbImageUtil.SCALEIMG, mWidth, mHeight); if(mBitmap!=null){ holder.mImageView1.setImageBitmap(mBitmap); }else{ // 无图片时显示 holder.mImageView1.setImageResource(R.drawable.image_empty); } } }else{ //直接显示 holder.mImageView1.setImageBitmap(bitmap); } }else{ // 无图片时显示 holder.mImageView1.setImageResource(R.drawable.image_empty); } holder.mImageView1.setAdjustViewBounds(true); return convertView; } /** * 增加并改变视图. * @param position the position * @param imagePaths the image paths */ public void addItem(int position,String imagePaths) { mImagePaths.add(position,imagePaths); notifyDataSetChanged(); } /** * 增加多条并改变视图. * @param imagePaths the image paths */ public void addItems(List<String> imagePaths) { mImagePaths.addAll(imagePaths); notifyDataSetChanged(); } /** * 增加多条并改变视图. */ public void clearItems() { mImagePaths.clear(); notifyDataSetChanged(); } /** * View元素. */ public static class ViewHolder { /** The m image view1. */ public ImageView mImageView1; /** The m image view2. */ public ImageView mImageView2; } }