添加依赖:

   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 打开相册拍照选择多张图片显示的更多相关文章

  1. android: 从相册中选择照片

    虽然调用摄像头拍照既方便又快捷,但并不是每一次我们都需要去当场拍一张照片的. 因为每个人的手机相册里应该都会存有许许多多张照片,直接从相册里选取一张现有的照 片会比打开相机拍一张照片更加常用.一个优秀 ...

  2. Android调用相册拍照控件实现系统控件缩放切割图片

    android 下如果做处理图片的软件 可以调用系统的控件 实现缩放切割图片 非常好的效果 今天写了一个demo分享给大家 package cn.m15.test; import java.io.By ...

  3. Android 调用相册 拍照 实现系统控件缩放 切割图片

    android 下如果做处理图片的软件 可以调用系统的控件 实现缩放切割图片 非常好的效果 今天写了一个demo分享给大家. package cn.m15.test; import java.io.B ...

  4. 解决Android调用相机拍照,要报“打开相机失败”查看debug日志显示“setParameters failed”的问题

    使用CameraLibrary项目,在部分手机或平板上不能正常使用,要报“打开相机失败”查看debug日志显示“setParameters failed”. 找到CameraView.java中的se ...

  5. android ——调用摄像头拍照和相册

    先在布局文件中加入两个按钮和一个图片控件 <?xml version="1.0" encoding="utf-8"?> <LinearLayo ...

  6. Android打开相机和打开相册

    打开相机 /** * 选择相机 */ private void showCamera() { // 跳转到系统照相机 Intent cameraIntent = new Intent(MediaSto ...

  7. android拍照选择图片上传服务器自定义控件

    做android项目的时候总免不了遇到图片上传功能,虽然就是调用android系统的拍照和相册选择功能,但是总面部了把一大推代码写在activity里,看上去一大推代码头都昏了.不如把这些功能都集成一 ...

  8. 利用WebUploader进行图片批量上传,在页面显示后选择多张图片压缩至指定路径【java】

    WebUploader是由Baidu WebFE(FEX)团队开发的一个简单的以HTML5为主,FLASH为辅的现代文件上传组件.在现代的浏览器里面能充分发挥HTML5的优势,同时又不摒弃主流IE浏览 ...

  9. Android开发在Activity外申请权限调用相机打开相册

    问题描述: 最近在项目中遇到一个需要调用相册和打开相机的需求,但是,在Android 6.0以后,调用相册属于危险权限,需要开发者动态获取,这就意味着我们申请权限是与Activity绑定的,但如果一个 ...

随机推荐

  1. DNS BIND配置 配置基本缓存服务器 DNS正向解析 DNS反向解析

    一. 缓存服务器配置 1.DNS:BIND    Berkeley Internet Name Domain    版本bind97: RPM服务器端包的名字  安装bind-libs    bind ...

  2. 《代码敲不队》第九次团队作业:Beta冲刺与验收准备

    项目 内容 这个作业属于哪个课程 任课教师博客主页链接 这个作业的要求在哪里 作业链接地址 团队名称 代码敲不队 作业学习目标 (1)掌握软件测试基础技术(2)学习迭代式增量软件开发过程(Scrum) ...

  3. linux中service模板

    [Unit] Description=描述 After=syslog.target network.target remote-fs.target nss-lookup.target [Service ...

  4. Python中pass、continue、break、exit()的区别

    pass :不做任何事情,只起到占位的作用 continue: 跳出本次循环 break:结束循环 exit():结束整个程序 由于continue和break较简单,这里就不给出代码

  5. JDK、JRE、JVM之间的关系及JDK安装

    JRE (Java Runtime Environment) :是Java程序的运行时环境,包含 JVM 和运行时所需要的 核心类库 .JDK (Java Development Kit):是Java ...

  6. Linux 常用命令1 pwd、ls、cd、tab、清屏、重定向、转义、管道、touch、mkdir、tree、cat、more、rmdir、rm、grep、help、man、history、find、cp、mv、tar、gz

    版权声明:本文为博主引用文章,未经博主及作者允许不得转载.  声明: 涉及的命令:pwd.ls.cd.tab.清屏.重定向.转义.管道.touch.mkdir.tree.cat.more.rmdir. ...

  7. 洛谷 P1854 花店橱窗布置 题解

    Analysis 给定一个f*v的矩阵 要求从第一行走到第f行,每行取走一个数, 且该行所取的数必须必上一行所取的数的列数大 , 求所能取走的最大值 注意每一行所取走的数字的列数必须大于等该行的行号 ...

  8. 红黑树 ------ luogu P3369 【模板】普通平衡树(Treap/SBT)

    二次联通门 : luogu P3369 [模板]普通平衡树(Treap/SBT) 近几天闲来无事...就把各种平衡树都写了一下... 下面是红黑树(Red Black Tree) 喜闻乐见拿到了luo ...

  9. 微信小程序--安装教程

    首先 奉上腾讯官方文档 方便参考:https://mp.weixin.qq.com/debug/wxadoc/design/index.html  个人认为没说啥特别有用的信息(可能是我看的太粗糙了) ...

  10. pandas数据保存至Mysql数据库

    pandas数据保存至Mysql数据库 import pandas as pd from sqlalchemy import create_engine host = '127.0.0.1' port ...