Android 打开相册拍照选择多张图片显示
添加依赖:
compile 'me.iwf.photopicker:PhotoPicker:0.1.8'
compile 'com.jaeger.ninegridimageview:library:1.0.1'
compile 'com.youth.banner:banner:1.4.10'
public class MainActivity extends AppCompatActivity {
int REQUEST_CODE = 0;
private NineGridImageView ngiv;
private ArrayList<String> photos;
private Dialog dialog;
private cn.com.jwtimes.www.jwtimes.mAdapter mAdapter1; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
TextView tv = findViewById(R.id.tv);
ngiv = findViewById(R.id.ngiv);
tv.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
PhotoPickerIntent intent = new PhotoPickerIntent(MainActivity.this);
intent.setPhotoCount(9);
intent.setShowCamera(true);
startActivityForResult(intent, REQUEST_CODE);
}
});
} @Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data); if (resultCode == RESULT_OK && requestCode == REQUEST_CODE) {
if (data != null) {
photos = data.getStringArrayListExtra(PhotoPickerActivity.KEY_SELECTED_PHOTOS);
ngiv.setAdapter(mAdapter);
ngiv.setImagesData(photos);
}
}
} private NineGridImageViewAdapter<String> mAdapter = new NineGridImageViewAdapter<String>() {
@Override
protected void onDisplayImage(Context context, ImageView imageView, final String url) {
Glide.with(context)
.load(url)
.into(imageView);
} @Override
protected ImageView generateImageView(Context context) {
return super.generateImageView(context);
} @Override
protected void onItemImageClick(Context context, int index, List<String> photoList) {
showBigPicture(context, photos, index);
}
}; private void showBigPicture(Context context, final ArrayList<String> photos, final int index) {
dialog = new Dialog(context, R.style.MyDialog);
View contentView = View.inflate(context, R.layout.dialog_tip, null);
final ViewPager vp = (ViewPager) contentView.findViewById(R.id.vp);
ImageView ivDelete = (ImageView) contentView.findViewById(R.id.ivDelete);
mAdapter1 = new mAdapter(this, photos, dialog);
vp.setAdapter(mAdapter1);
vp.setCurrentItem(index);
ivDelete.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int currentItem = vp.getCurrentItem();
Iterator<String> sListIterator = photos.iterator();
while (sListIterator.hasNext()) {
String e = sListIterator.next();
if (e.equals(photos.get(currentItem))) {
sListIterator.remove();
mAdapter1.notifyDataSetChanged();
break;
}
}
}
});
dialog.setOnDismissListener(new DialogInterface.OnDismissListener() {
@Override
public void onDismiss(DialogInterface dialog) {
ngiv.setAdapter(MainActivity.this.mAdapter);
ngiv.setImagesData(photos);
}
});
dialog.setContentView(contentView);
dialog.setCancelable(true);
dialog.getWindow().setLayout(
getScreenWidth(),
getScreenHeight());
dialog.show();
}
public int getScreenWidth() {
Resources resources = getResources();
return resources.getDisplayMetrics().widthPixels;
}
public int getScreenHeight() {
Resources resources = getResources();
return resources.getDisplayMetrics().heightPixels;
} }
public class mAdapter extends PagerAdapter {
private ArrayList<String> photos;
private Context context;
private Dialog dialog; public mAdapter(Context context, ArrayList<String> photos, Dialog dialog) {
this.photos = photos;
this.context = context;
this.dialog=dialog;
} @Override
public int getCount() {
return photos.size();
} @Override
public boolean isViewFromObject(View view, Object object) {
return view == object;
} @Override
public View instantiateItem(ViewGroup container, int position) { ImageView iv = new ImageView(context);
Glide.with(context).load(photos.get(position)).into(iv);
iv.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
dialog.dismiss();
}
});
container.addView(iv);
return iv; } @Override
public void destroyItem(ViewGroup container, int position, Object object) {
container.removeView((View) object);
}
}
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="cn.com.jwtimes.www.jwtimes.MainActivity">
<TextView
android:id="@+id/tv"
android:layout_width="match_parent"
android:text="选择照片"
android:layout_height="wrap_content" />
<com.jaeger.ninegridimageview.NineGridImageView
android:id="@+id/ngiv"
android:layout_width="match_parent"
android:layout_height="150dp"
android:layout_margin="10dp"
app:imgGap="4dp"
app:showStyle="fill"
app:singleImgSize="120dp" /> </android.support.constraint.ConstraintLayout>
dialog_top.xml
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/black_40"> <android.support.v4.view.ViewPager
android:id="@+id/vp"
android:layout_width="match_parent"
android:layout_height="match_parent" /> <ImageView
android:id="@+id/ivDelete"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="right"
android:src="@drawable/delete" /> <TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="bottom"
android:layout_margin="10dp"
android:gravity="right"
android:text="1/9"
android:textColor="@color/colorAccent" />
</FrameLayout>
<resources> <!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
</style>
<style name="MyDialog" parent="@android:style/Theme.Dialog">
<item name="android:windowFrame">@null</item>
<item name="android:windowNoTitle">true</item>
<item name="android:windowIsTranslucent">false</item>
<item name="android:windowBackground">@color/black_40</item>
<item name="android:windowIsFloating">true</item>
<item name="android:windowContentOverlay">@null</item>
</style>
</resources>
效果:
Android 打开相册拍照选择多张图片显示的更多相关文章
- android: 从相册中选择照片
虽然调用摄像头拍照既方便又快捷,但并不是每一次我们都需要去当场拍一张照片的. 因为每个人的手机相册里应该都会存有许许多多张照片,直接从相册里选取一张现有的照 片会比打开相机拍一张照片更加常用.一个优秀 ...
- Android调用相册拍照控件实现系统控件缩放切割图片
android 下如果做处理图片的软件 可以调用系统的控件 实现缩放切割图片 非常好的效果 今天写了一个demo分享给大家 package cn.m15.test; import java.io.By ...
- Android 调用相册 拍照 实现系统控件缩放 切割图片
android 下如果做处理图片的软件 可以调用系统的控件 实现缩放切割图片 非常好的效果 今天写了一个demo分享给大家. package cn.m15.test; import java.io.B ...
- 解决Android调用相机拍照,要报“打开相机失败”查看debug日志显示“setParameters failed”的问题
使用CameraLibrary项目,在部分手机或平板上不能正常使用,要报“打开相机失败”查看debug日志显示“setParameters failed”. 找到CameraView.java中的se ...
- android ——调用摄像头拍照和相册
先在布局文件中加入两个按钮和一个图片控件 <?xml version="1.0" encoding="utf-8"?> <LinearLayo ...
- Android打开相机和打开相册
打开相机 /** * 选择相机 */ private void showCamera() { // 跳转到系统照相机 Intent cameraIntent = new Intent(MediaSto ...
- android拍照选择图片上传服务器自定义控件
做android项目的时候总免不了遇到图片上传功能,虽然就是调用android系统的拍照和相册选择功能,但是总面部了把一大推代码写在activity里,看上去一大推代码头都昏了.不如把这些功能都集成一 ...
- 利用WebUploader进行图片批量上传,在页面显示后选择多张图片压缩至指定路径【java】
WebUploader是由Baidu WebFE(FEX)团队开发的一个简单的以HTML5为主,FLASH为辅的现代文件上传组件.在现代的浏览器里面能充分发挥HTML5的优势,同时又不摒弃主流IE浏览 ...
- Android开发在Activity外申请权限调用相机打开相册
问题描述: 最近在项目中遇到一个需要调用相册和打开相机的需求,但是,在Android 6.0以后,调用相册属于危险权限,需要开发者动态获取,这就意味着我们申请权限是与Activity绑定的,但如果一个 ...
随机推荐
- oracle添加序列
原文地址 http://blog.itpub.net/24099965/viewspace-1116923/ 1.创建.删除 create sequence seq_newsId increment ...
- SQL进阶系列之1CASE表达式
配置环境: 下载地址:https://www.enterprisedb.com/downloads/postgres-postgresql-downloads#windows 使用数据库: C:\Po ...
- openstack创建实例时aborted: Block Device Mapping is Invalid
问题产生原因: 直接先不创建新卷,点击否,待实例创建完毕后再分配卷.
- 完成一个springboot项目的完整总结------三
这一次的总结是最关键的部分,主要涉及了ORM的三种操作,这些操作是项目的难点,三种操作包括多对一.多对多.一对多三种模式,接下来展示项目代码 1.多对一 clazz表对应grade表和charge表 ...
- Linux安装版本solr-5.3.0
准备材料:solr-5.3.0.tgz 下载路径:http://mirrors.hust.edu.cn/apache/lucene/solr/ 安装solr 1.解压solr [root@svn-se ...
- PCL安装与配置
一.配置环境 1.win7 64位2.Visual Studio 2015 二 .准备工作 安装包准备: 移步:https://www.cnblogs.com/weiyouqing/p/8046387 ...
- Linux - 运行 django 时 :django.db.utils.Notsupportederror: urls not supported
运行 django 是异常:django.db.utils.Notsupportederror: urls not supported 原因:sqlite3版本3.7的问题 解决:直接改源码 1. p ...
- 012——matlab判断变量是否存在
(一)参考文献:https://www.ilovematlab.cn/thread-48319-1-1.html (二) clc clear a = exist('a') ans =1 clc cle ...
- jsp+ tinymce粘贴word
最近公司做项目需要实现一个功能,在网页富文本编辑器中实现粘贴Word图文的功能. 我们在网站中使用的Web编辑器比较多,都是根据用户需求来选择的.目前还没有固定哪一个编辑器 有时候用的是UEditor ...
- yum和apt-get 软件包管理器的用法及区别
yum( Yellow dog Updater, Modified)是一个在Fedora和RedHat以及SUSE中的Shell前端软件包管理器. 一般来说著名的linux系统基本上分两大类: 1.R ...