android 封装照相机,Android自定义组件获取本地图片和相机拍照图片

iOS中有封装好的选择图片后长按出现动画删除效果,效果如下

a3afe01ef6098fbb6b2b4e03ff84d577.gif

而Android找了很久都没有找到有这样效果的第三方组件,最后懒得找了还是自己实现这效果吧

选择图片后还可对图片进行剪裁

3101cb829d9482b06c7a4a417d466e92.gif

当然,代码中还有很多不完善的地方,我接下来会继续完善这个组件的

已经上传到开源社区,欢迎大家来Star啊~

Demo源码:传送门

设计中的碰到的一些问题和解决思路

1.如何让加号图片显示在GridView最后面

首先在调用GridAdapter构造方法时就加载加号图片

/**

* 图片适配器

* @param context 上下文

* @param imagesum 最大可添加图片数

*/

public GridAdapter(Context context, int imagesum) {

this.context = context;

this.imageSum = imagesum;

// 加号图片

mAddBitmap = BitmapFactory.decodeResource(context.getResources(), R.drawable.ic_add_image);

}

然后在getCount()方法里对图片数据集合加1,在该位置上添加加号图片

@Override

public int getCount() {

// 数据集合加一,在该位置上添加加号

return imageItemData == null ? 0 : imageItemData.size() + 1;

}

最后在getView()方法中,每次显示图片时都对数据集合中的元素数量进行判断,如果数据集合的数量大于position,则表示需要显示加号图片

if (imageItemData != null && imageItemData.size() > position) {

// 正常图片

} else {

// 加号图片

}

这样就能保证加号图片一直在GridView最后一个item上

2.如何显示出删除按钮

在item布局时,在图片的右上角覆盖一层删除按钮,在Adapter中对这个图片的显示和隐藏进行处理

/** 判断是否显示清除按钮 true=显示 */

private boolean showImageClear = false;

//对外提供显示和隐藏的方法

/**

* 设置图片显示状态

* @param clear 图片状态

*/

public void setClearImgShow(boolean clear) {

showImageClear = clear;

}

/**

* 图片显示状态

* @return 状态 true=显示

*/

public boolean getClearImgShow() {

return showImageClear;

}

删除按钮默认不显示,当用户长按图片时就显示出来

// 长按显示删除按钮

mGridView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {

@Override

public boolean onItemLongClick(AdapterView> parent, View view, int position, long id) {

if (!(position == gridAdapter.imageItemData.size())) {

// 如果删除按钮已经显示了则不再设置

if (!gridAdapter.getClearImgShow()) {

gridAdapter.setClearImgShow(true);

gridAdapter.notifyDataSetChanged();

}

}

// 返回true,停止事件向下传播

return true;

}

});

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值