栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 移动开发 > Android

Android图片上传实现预览效果

Android 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Android图片上传实现预览效果

首先具体分析一下,实现的功能,其中需求分析是必不可少的,需求、逻辑清除之后,再上手写代码,思路会很清晰。

1.多图上传首先得选择图片(这里项目需求是既可以拍照上传也可以从相册中选择)

2.拍照上传很简单了网上也有很多例子,调用照相机,返回uri,获取图片

3.从相册中选择图片

  •  3.1 获取手机中的所有图片
  •  3.2 将图片存到自定义图片数组中显示
  •  3.3 自定义ViewPager浏览图片

主要的逻辑大体是这样,下面具体看一下实现:

一、首先看一下界面:

 

是一个 NoScrollGridView,项目需要,所以用了不滚动的GridView,大家用GridView也是一样的。

noScrollgridview = (GridView) findViewById(R.id.noScrollgridview); 
    noScrollgridview.setSelector(new ColorDrawable(Color.TRANSPARENT)); 
     
    if (file == null) { 
      picAdapter = new PictureAdapter(this, 0, null); 
    } else { 
      //添加失败的图片到数组中 
      for (int i=0;i

这个是初始化图片数组,适配器(新建、上传失败、上传成功的图片我用的都是一个adapter)

ImageItem是图片的模型,下面有它的属性

//从图库选择的图片model 
public class ImageItem extends File implements Serializable { 
  @Id 
  public String imageId; //图片id 
  public String thumbnailPath;  
  public String imagePath; //图片路径 
  private Bitmap bitmap;  
  public boolean isSelected = false; 
   
  public String getImageId() { 
    return imageId; 
  } 
  public void setImageId(String imageId) { 
    this.imageId = imageId; 
  } 
  public String getThumbnailPath() { 
    return thumbnailPath; 
  } 
  public void setThumbnailPath(String thumbnailPath) { 
    this.thumbnailPath = thumbnailPath; 
  } 
  public String getImagePath() { 
    return imagePath; 
  } 
  public void setImagePath(String imagePath) { 
    this.imagePath = imagePath; 
  } 
  public boolean isSelected() { 
    return isSelected; 
  } 
  public void setSelected(boolean isSelected) { 
    this.isSelected = isSelected; 
  } 
[java] view plain copy print?
 
public Bitmap getBitmap() {      
  if(bitmap == null){ 
    try { 
      bitmap = Bimp.revitionImageSize(imagePath); 
    } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
    } 
  } 
  return bitmap; 
} 
public void setBitmap(Bitmap bitmap) { 
  this.bitmap = bitmap; 
} 

 接下来是适配器:

由于涉及到添加图片,adapter中添加一个flag用来显示新建的图片,将选择的图片添加到公有的图片数组中,初始化的时候加载图片数组显示。(大家在看的时候可以忽略掉我的flag)

@SuppressLint("HandlerLeak") 
public class PictureAdapter extends baseAdapter { 
  private LayoutInflater inflater; 
  private int selectedPosition = -1; 
  private boolean shape; 
  private int flag = 0;//0 默认新建 1上传成功 2上传失败 
  private AppItem_file file; 
  public boolean isShape() { 
    return shape; 
  } 
  private Activity context; 
 
  public void setShape(boolean shape) { 
    this.shape = shape; 
  } 
 
  public PictureAdapter(Activity context,int flag,AppItem_file file) { 
    this.context = context; 
    inflater = LayoutInflater.from(context); 
    this.flag = flag; 
    this.file = file; 
  } 
 
//  public void update() { 
//    loading(); 
//  } 
 
  public int getCount() { 
    if (flag==0){  //新建图片 
      if (Bimp.tempSelectBitmap.size() == 6) { 
 return 6; 
      } 
      return (Bimp.tempSelectBitmap.size() + 1); 
    } 
    else if (flag==1){ //上传成功 
      return file.getFileList().size(); 
    } 
    else { //上传失败 
      return file.getMulFailFilePaths().length; 
    } 
 
  } 
 
 
 
  public Object getItem(int arg0) { 
    if (flag==1){ 
      return file.getFileList().get(arg0); 
    }else { 
      return file.getMulFailFilePaths()[arg0]; 
    } 
  } 
 
  public long getItemId(int arg0) { 
    return arg0; 
  } 
 
  public void setSelectedPosition(int position) { 
    selectedPosition = position; 
  } 
 
  public int getSelectedPosition() { 
    return selectedPosition; 
  } 
 
  public View getView(int position, View convertView, ViewGroup parent) { 
    ViewHolder holder = null; 
    if (convertView == null) { 
      //根据图片的数量加载不同布局 
      if (getCount()==1&&flag!=0){ 
 convertView = inflater.inflate(R.layout.item_published_singal_item, 
     parent, false); 
      } 
      else { 
 convertView = inflater.inflate(R.layout.item_published_grida, 
     parent, false); 
      } 
 
      holder = new ViewHolder(); 
      holder.image = (ImageView) convertView 
   .findViewById(R.id.item_grida_image); 
      convertView.setTag(holder); 
    } else { 
      holder = (ViewHolder) convertView.getTag(); 
    } 
 
     
    if (flag==0){  //新建图片 
      if (position == Bimp.tempSelectBitmap.size()) { 
 holder.image.setImageBitmap(BitmapFactory.decodeResource( 
     convertView.getResources(), R.drawable.icon_add_pic_unfocused)); 
 if (position == 6) { 
   if (flag==0){ 
     holder.image.setVisibility(View.GONE); 
   } 
 } 
      } else { 
 holder.image.setImageBitmap(Bimp.tempSelectBitmap.get(position).getBitmap()); 
      } 
    } 
    else if (flag==1){ //上传成功 
//      List ids = new ArrayList(); 
//      for (int i=0;i

 下面是自定义相册界面,用来选择图片的

 
 
   
    

 同样也是用了GridView,获取手机中的图片,添加到数组中,显示

这里用到了一个AlbumHelper(相册帮助类),网上找的代码,感觉挺好的

public List getImagesBucketList(boolean refresh) { 
    if (refresh || (!refresh && !hasBuildImagesBucketList)) { 
      buildImagesBucketList(); 
    } 
    List tmpList = new ArrayList(); 
    Iterator> itr = bucketList.entrySet() 
 .iterator(); 
    while (itr.hasNext()) { 
      Entry entry = (Entry) itr 
   .next(); 
      tmpList.add(entry.getValue()); 
    } 
    return tmpList; 
  } 

获取到数据源之后,该显示了,也就是利用的获取图片帮助类里面的方法

// 初始化,给一些对象赋值 
  private void init() { 
    helper = AlbumHelper.getHelper(); 
    helper.init(getApplicationContext()); 
     
    contentList = helper.getImagesBucketList(false); 
    dataList = new ArrayList(); 
    for(int i = 0; i


gridImageAdapter 
 .setonItemClickListener(new AlbumGridViewAdapter.onItemClickListener() { 
 
   @Override 
   public void onItemClick(final ToggleButton toggleButton, 
int position, boolean isChecked,Button chooseBt) { 
     if (Bimp.tempSelectBitmap.size() >= NeedApplication.picNums) { 
toggleButton.setChecked(false); 
chooseBt.setVisibility(View.GONE); 
if (!removeoneData(dataList.get(position))) { 
  Toast.makeText(AlbumActivity.this, "超出可选图片张数", Toast.LENGTH_SHORT).show(); 
} 
return; 
     } 
     if (isChecked) { 
chooseBt.setVisibility(View.VISIBLE); 
Bimp.tempSelectBitmap.add(dataList.get(position)); 
okButton.setText("完成"+"(" + Bimp.tempSelectBitmap.size() 
    + "/"+ NeedApplication.picNums+")"); 
     } else { 
Bimp.tempSelectBitmap.remove(dataList.get(position)); 
chooseBt.setVisibility(View.GONE); 
okButton.setText("完成"+"(" + Bimp.tempSelectBitmap.size() + "/"+ NeedApplication.picNums+")"); 
     } 
     isShowOkBt(); 
   } 
 }); 

点击图片选择加到公有图片数组中显示已选择。

最后是预览图片,利用自定义viewpager,实现图片滑动,下面贴两张截图吧:

以上就是本文的全部内容,希望对大家的学习有所帮助。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/163415.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号