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>

效果:

posted on 2019-06-06 17:33  LoaderMan  阅读(1925)  评论(6编辑  收藏  举报

导航