一款支持本地相册选取和拍照上传的图片选择器,之前在项目中也有用到,今天就把我自己写的图片选择器分享给大家:
一如往常,先贴出一张效果图
接下来是实现步骤:
步骤一:首先需要在配置清单中声明相应的权限:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>步骤二:定义好在什么地方需要弹出的窗口以及弹出的内容,我这个地方用的是在屏幕下方弹出一个如下图的PopupWindow。
步骤三:开始对每一个需要监听的地方进行监听
/**
* 按钮的点击监听
*/
private class ButtonListener
implements View.OnClickListener {
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.
but_image:
InputMethodManager imm = (InputMethodManager) getSystemService(
INPUT_METHOD_SERVICE)
;
if (imm.isActive()) {
imm.hideSoftInputFromWindow(v.getWindowToken()
, 0)
;
}
if (
mPopupWindowDialog !=
null) {
mPopupWindowDialog.showAtLocation(findViewById(R.id.
but_image)
, Gravity.
BOTTOM | Gravity.
CENTER_HORIZONTAL, 0, 0)
;
}
break;
case R.id.
textview_dialog_take_picture:
// 拍照
getImageFromCamera()
;
dismPopupWindowDialog()
;
break;
case R.id.
textview_dialog_album:
// 相册
dismPopupWindowDialog()
;
putPhoto()
;
break;
case R.id.
textview_dialog_cancel:
// 取消
dismPopupWindowDialog()
;
break;
}
}
}对每一个方法进行相应的处理,举个拍照的例子:使用startActivityForResult的启动方式来处理回传数据,
/**
* 拍照
*/
protected void getImageFromCamera() {
Intent intent =
new Intent(MediaStore.
ACTION_IMAGE_CAPTURE)
;
Uri uri = Uri.
fromFile(
new File(
tempPath))
;
intent.putExtra(MediaStore.
EXTRA_OUTPUT, uri)
;
startActivityForResult(intent
, REQUEST_CODE_CAPTURE_CAMEIA)
;
}然后在onActivityResult中去处理回传的数据:
BitmapFactory.Options option =
new BitmapFactory.Options()
;
option.
inJustDecodeBounds =
true;// 如果设置为true,则解码器将返回null(无位图),但是out ...字段仍将被设置,允许调用者查询位图,而不必为其像素分配内存
Bitmap bitmap = BitmapFactory.
decodeFile(
tempPath, option)
;
option.
inJustDecodeBounds =
false;
option.
inSampleSize =
4;//如果设置为值> 1,请求解码器对原始图像进行子采样,返回较小的图像以节省内存。
bitmap = BitmapFactory.
decodeFile(
tempPath, option)
;
bmpList.add(bitmap)
;//添加进集合里
showPrevious()
;//在对应的控件里面显示到这里获取一张拍照上传的图片就基本完善了,最后是获取到需要上传的图片然后查看大图,这个地方需要对临时的Imageview进行点击监听
// iv1的点击事件
private View.OnClickListener
imageView1_click =
new View.OnClickListener() {
@Override
public void onClick(View arg0) {
Intent intent =
new Intent()
;
intent.putExtra(
"index", 1)
;
BitmapUtil.
getInstance().setBitmap(
bmpList.get(
0))
;//获取集合里面的对象
intent.setClass(MainActivity.
this, ImageDetailActivity.
class)
;
startActivityForResult(intent
, PICTER_DEAL)
;
}
}
;然后在详情的activity里面去这样处理图片,注意这个地方需要把XML文件中ImageView控件的类型设置为centerCrop
@SuppressLint(
"NewApi")
public void loadImg() {
Intent intent = getIntent()
;
index = intent.getIntExtra(
"index", 0)
;
Bitmap bitmap = BitmapUtil.
getInstance().getBitmap()
;
if (bitmap !=
null)
iv.setBackground(
new BitmapDrawable(bitmap))
;
}
这个地方一个完整的拍照上传的图片选择器就处理完了,最后贴上源代码
转载请注明原文地址: https://ju.6miu.com/read-149664.html