android 多图上传插件,Android自定义View实现多图片选择控件

前言

相信很多朋友在开发中都会遇到图片上传的情况,尤其是多图上传,最经典的莫过于微信的图片选择了。所有很多情况下会使用到多图选择,所以就有了这篇文章,今天抽点时间写了个控件。

•支持自定义选择图片的样式

•支持设置图片选择数量

•支持图片预览,删除

•支持图片拍照

先来看看效果

797f5d33f08e61720fd9325582c8f200.gif

e7f3ce66dab3a23d7930f91d929f91df.gif

实现分析

假如不定义控件,我们要实现这样一个功能,无非是写个GridView在item点击的时候去显示图片进行选择,在返回界面的时候进行GridView的数据刷新。我们把这些逻辑写在我们自定义的GridView中,就成了一个新的控件。

1、GridView的效果展示,逻辑实现。

public class ImagePickerView extends GridView{

//图片选择数量

int maxImageSize = 9;

//添加item布局

private int noImgResource;

//列选择数量

private int columnNumber = 3;

Activity context;

ImagesAdapter adapter;

List imageList;//图片选择list

private static final int TYPE_SHOW_ADD = 0;

private static final int TYPE_NO_SHOW_ADD = 1;

private boolean isShowAdd = true;

int imageGridSize;

public void setNoImgResource(int noImgResource) {

this.noImgResource = noImgResource;

}

public void setColumnNumber(int columnNumber) {

if (columnNumber>5){

columnNumber = 5;

}

this.columnNumber = columnNumber;

this.setNumColumns(columnNumber);

}

public void setShowAdd(boolean showAdd) {

isShowAdd = showAdd;

}

public void setImageList(List imageList) {

this.imageList = imageList;

adapter.setImageList(imageList);

}

public List getImageList() {

return imageList;

}

public ImagePickerView(Context context) {

this(context,null);

}

public ImagePickerView(Context context, AttributeSet attrs) {

this(context,attrs,0);

}

/**

* 初始化ImagePickerView的一些信息

* @param context

* @param attrs

* @param defStyle

*/

public ImagePickerView(Context context, AttributeSet attrs, int defStyle) {

super(context, attrs, defStyle);

this.context = (Activity) context;

adapter = new ImagesAdapter();

this.setAdapter(adapter);

if (imageList==null){

imageList = new ArrayList<>();

}

this.setNumColumns(columnNumber);

this.setVerticalSpacing(10);

this.setHorizontalSpacing(10);

imageGridSize = (this.context.getWindowManager().getDefaultDisplay().getWidth() - Util.dp2px(context, 2) * 2) / columnNumber;

}

/**

* 提供给外部调用用来再Activity返回时获取图片信息

* @param requestCode

* @param resultCode

* @param data

*/

public void onActivityResult(int requestCode, int resultCode, Intent data) {

if (data!=null&& !TextUtils.isEmpty(data.getStringExtra("photoPath"))){//拍照

imageList.add(data.getStringExtra("photoPath"));

}else if (data!=null&&data.getSerializableExtra("images")!=null){//图片选择

imageList = (List) data.getSerializableExtra("images");

}else{

List list = AndroidIm

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值