Coder Social home page Coder Social logo

bgaphotopicker-android's Introduction

🏃BGAPhotoPicker-Android🏃

兼容 Glide3

目录

功能介绍

MeiqiaSDK-Android 里的图库单独抽出来开源,将其中的 GridView、ListView 和 RelativeLayout 换成 RecyclerView 和 Toolbar,方便在以后的项目中直接依赖使用。Demo 中模仿了微信朋友圈的部分功能,详细用法请查看 Demo。希望能该库帮正在做这几个功能的猿友节省开发时间。

  • 单图选择
  • 多图选择
  • 拍照选择
  • 图片选择预览(支持微博长图)、缩放查看
  • 图片预览(支持微博长图)、缩放查看
  • 支持 glide、picasso、universal-image-loader、xutils 图片加载库
  • 支持配置列表滚动时是否暂停加载图片,列表停止滚动时恢复加载图片(用 xutils 作为图片加载库时该配置无效)
  • 正方形、圆形头像、带边框的圆形头像控件
  • 朋友圈列表界面的九宫格图片控件
  • 发布朋友圈界面的可拖拽排序的九宫格图片控件
  • 覆盖相应的资源文件来定制界面
  • BGAPhotoHelper 图片裁剪、拍照

效果图与示例 apk

Demo 自定义
1 2
自定义 自定义
3 4

点击下载 BGAPhotoPickerDemo.apk 或扫描下面的二维码安装

bga_photopicker_qrcode1

使用

1.添加 Gradle 依赖

  • maven { url 'https://jitpack.io' } 添加到 root build.gradle 的 repositories 中
  • 在 app build.gradle 中添加如下依赖,末尾的「latestVersion」指的是徽章 里的版本名称,请自行替换

由于需要支持微博长图预览,该库中已经引入了 PhotoView 的源码并进行了修改,所以你的项目中就不要再重复引入 PhotoView

dependencies {
    // -------------------- 以下4个库是必须依赖的 ----------------------------
    implementation 'com.github.bingoogolapple:BGAPhotoPicker-Android:latestVersion'
    implementation 'androidx.appcompat:appcompat:1.1.0'
    implementation 'androidx.legacy:legacy-support-v4:1.0.0'
    implementation 'androidx.recyclerview:recyclerview:1.0.0'
    implementation 'com.github.bingoogolapple:BGABaseAdapter-Android:2.0.1'
    // -------------------- 以上4个库是必须依赖的 ----------------------------

    // 目前支持常见的 4 种图片加载库,必须在下面四个图片加载库中选择一个添加依赖
    implementation 'com.github.bumptech.glide:glide:4.10.0'
    annotationProcessor 'com.github.bumptech.glide:compiler:4.10.0'
//    implementation 'com.squareup.picasso:picasso:2.5.2'
//    implementation 'com.nostra13.universalimageloader:universal-image-loader:1.9.5'
//    implementation 'org.xutils:xutils:3.8.3'
}

2.接口说明

BGAPhotoPickerActivity - 选择图片

@AfterPermissionGranted(PRC_PHOTO_PICKER)
private void choicePhotoWrapper() {
    String[] perms = {Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.CAMERA};
    if (EasyPermissions.hasPermissions(this, perms)) {
        // 拍照后照片的存放目录,改成你自己拍照后要存放照片的目录。如果不传递该参数的话就没有拍照功能
        File takePhotoDir = new File(Environment.getExternalStorageDirectory(), "BGAPhotoPickerTakePhoto");

        Intent photoPickerIntent = new BGAPhotoPickerActivity.IntentBuilder(this)
                .cameraFileDir(mTakePhotoCb.isChecked() ? takePhotoDir : null) // 拍照后照片的存放目录,改成你自己拍照后要存放照片的目录。如果不传递该参数的话则不开启图库里的拍照功能
                .maxChooseCount(mPhotosSnpl.getMaxItemCount() - mPhotosSnpl.getItemCount()) // 图片选择张数的最大值
                .selectedPhotos(null) // 当前已选中的图片路径集合
                .pauseOnScroll(false) // 滚动列表时是否暂停加载图片
                .build();
        startActivityForResult(photoPickerIntent, RC_CHOOSE_PHOTO);
    } else {
        EasyPermissions.requestPermissions(this, "图片选择需要以下权限:\n\n1.访问设备上的照片\n\n2.拍照", PRC_PHOTO_PICKER, perms);
    }
}

BGAPhotoPickerActivity - 获取已选择的图片集合

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (resultCode == RESULT_OK && requestCode == RC_CHOOSE_PHOTO) {
        List<String> selectedPhotos = BGAPhotoPickerActivity.getSelectedPhotos(data);
    }
}

BGAPhotoPickerPreviewActivity - 预览已选择的图片

Intent photoPickerPreviewIntent = new BGAPhotoPickerPreviewActivity.IntentBuilder(this)
        .previewPhotos(models) // 当前预览的图片路径集合
        .selectedPhotos(models) // 当前已选中的图片路径集合
        .maxChooseCount(mPhotosSnpl.getMaxItemCount()) // 图片选择张数的最大值
        .currentPosition(position) // 当前预览图片的位置
        .isFromTakePhoto(false) // 是否是拍完照后跳转过来
        .build();
startActivityForResult(photoPickerPreviewIntent, RC_PHOTO_PREVIEW);

BGAPhotoPickerPreviewActivity - 获取预览界面已选择的图片集合

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == RC_PHOTO_PREVIEW) {
        // 在预览界面按返回也会回传预览界面已选择的图片集合
        List<String> selectedPhotos = BGAPhotoPickerPreviewActivity.getSelectedPhotos(data);
    }
}

BGAPhotoPreviewActivity - 图片预览

@AfterPermissionGranted(PRC_PHOTO_PREVIEW)
private void photoPreviewWrapper() {
    String[] perms = {Manifest.permission.WRITE_EXTERNAL_STORAGE};
    if (EasyPermissions.hasPermissions(this, perms)) {
        File downloadDir = new File(Environment.getExternalStorageDirectory(), "BGAPhotoPickerDownload");
        BGAPhotoPreviewActivity.IntentBuilder photoPreviewIntentBuilder = new BGAPhotoPreviewActivity.IntentBuilder(this)
                .saveImgDir(downloadDir); // 保存图片的目录,如果传 null,则没有保存图片功能

        if (mCurrentClickNpl.getItemCount() == 1) {
            // 预览单张图片
            photoPreviewIntentBuilder.previewPhoto(mCurrentClickNpl.getCurrentClickItem());
        } else if (mCurrentClickNpl.getItemCount() > 1) {
            // 预览多张图片
            photoPreviewIntentBuilder.previewPhotos(mCurrentClickNpl.getData())
                    .currentPosition(mCurrentClickNpl.getCurrentClickItemPosition()); // 当前预览图片的索引
        }
        startActivity(photoPreviewIntentBuilder.build());
    } else {
        EasyPermissions.requestPermissions(this, "图片预览需要以下权限:\n\n1.访问设备上的照片", PRC_PHOTO_PREVIEW, perms);
    }
}

3.自定义样式

<!-- ========================== 自定义 PhotoPicker 颜色 START ========================== -->
<!-- PhotoPicker 状态栏的颜色 -->
<color name="bga_pp_colorPrimaryDark">@color/colorPrimaryDark</color>
<!-- PhotoPicker 导航栏的颜色 -->
<color name="bga_pp_navigationBarColor">@color/navigationBarColor</color>
<!-- PhotoPicker Toolbar 的颜色 -->
<color name="bga_pp_colorPrimary">@color/colorPrimary</color>
<!-- 图片选择器库里所有Activity界面的背景色 -->
<color name="bga_pp_activity_bg">@android:color/white</color>
<!-- 文字颜色 -->
<color name="bga_pp_common_textColor">@android:color/white</color>
<!-- 文件夹名称颜色 -->
<color name="bga_pp_folder_name_textColor">#282828</color>
<!-- 文件夹中照片数量颜色 -->
<color name="bga_pp_folder_count_textColor">#585858</color>
<!-- 图片条目背景色 -->
<color name="bga_pp_photo_item_bg">#303d42</color>
<!-- 拍摄照片文字颜色 -->
<color name="bga_pp_take_photo_textColor">#adb2bb</color>
<!-- 图片处于选中状态时的遮罩层颜色 -->
<color name="bga_pp_photo_selected_mask">#4DFFFFFF</color>
<!-- 右上角确认按钮不可用时的颜色 -->
<color name="bga_pp_btn_confirm_disabled">@android:color/transparent</color>
<!-- 右上角确认按钮可用时的颜色 -->
<color name="bga_pp_btn_confirm_enabled">@android:color/transparent</color>
<!-- 右上角确认按钮按下时的颜色 -->
<color name="bga_pp_btn_confirm_pressed">@android:color/transparent</color>
<!-- 预览界面底部背景色 -->
<color name="bga_pp_preview_bottom_bg">@color/colorPrimary</color>
<!-- 数据加载对话框加载进度条的颜色 -->
<color name="bga_pp_loading_progress_startColor">@android:color/white</color>
<color name="bga_pp_loading_progress_centerColor">@color/colorPrimaryDark</color>
<color name="bga_pp_loading_progress_endColor">@color/colorPrimaryDarkTrans</color>
<!-- ========================== 自定义 PhotoPicker 颜色 END ========================== -->

自定义属性说明

<declare-styleable name="BGASortableNinePhotoLayout">
    <!-- 是否显示加号,默认值为 true -->
    <attr name="bga_snpl_plusEnable" format="boolean"/>
    <!-- 是否可拖拽排序,默认值为 true -->
    <attr name="bga_snpl_sortable" format="boolean"/>
    <!-- 删除按钮图片,默认值为 R.mipmap.bga_pp_ic_delete -->
    <attr name="bga_snpl_deleteDrawable" format="reference"/>
    <!-- 可选择图片的总张数,默认值为 9 -->
    <attr name="bga_snpl_maxItemCount" format="integer"/>
    <!-- 列数,默认值为 3 -->
    <attr name="bga_snpl_itemSpanCount" format="integer"/>
    <!-- 删除按钮是否重叠四分之一,默认值为 false -->
    <attr name="bga_snpl_deleteDrawableOverlapQuarter" format="boolean"/>
    <!-- 添加按钮图片,默认值为 R.mipmap.bga_pp_ic_plus -->
    <attr name="bga_snpl_plusDrawable" format="reference"/>
    <!-- Item 条目圆角尺寸,默认值为 0dp -->
    <attr name="bga_snpl_itemCornerRadius" format="dimension|reference"/>
    <!-- Item 间的水平和垂直间距,默认值为 4dp -->
    <attr name="bga_snpl_itemWhiteSpacing" format="dimension|reference"/>
    <!-- 出去九宫格部分的空白区域的尺寸,默认值为 100dp -->
    <attr name="bga_snpl_otherWhiteSpacing" format="dimension|reference"/>
    <!-- 占位图资源,默认值为 R.mipmap.bga_pp_ic_holder_light -->
    <attr name="bga_snpl_placeholderDrawable" format="reference"/>
    <!-- 是否可编辑,默认值为 true -->
    <attr name="bga_snpl_editable" format="boolean"/>
    <!-- item 的尺寸,大于 0dp 时优先级高于 bga_snpl_otherWhiteSpacing,默认值为 0dp -->
    <attr name="bga_snpl_itemWidth" format="dimension|reference"/>
</declare-styleable>

<declare-styleable name="BGANinePhotoLayout">
    <!-- Item 条目圆角尺寸,默认值为 0dp -->
    <attr name="bga_npl_itemCornerRadius" format="dimension|reference"/>
    <!-- 当只有一张图片时,是否显示成大图,默认值为 true -->
    <attr name="bga_npl_showAsLargeWhenOnlyOne" format="boolean"/>
    <!-- Item 间的水平和垂直间距,默认值为 4dp -->
    <attr name="bga_npl_itemWhiteSpacing" format="dimension|reference"/>
    <!-- 出去九宫格部分的空白区域的尺寸,默认值为 100dp -->
    <attr name="bga_npl_otherWhiteSpacing" format="dimension|reference"/>
    <!-- 占位图资源,默认值为 R.mipmap.bga_pp_ic_holder_light -->
    <attr name="bga_npl_placeholderDrawable" format="reference"/>
    <!-- item 的尺寸,优先级高于 bga_npl_otherWhiteSpacing,默认值为 0dp -->
    <attr name="bga_npl_itemWidth" format="dimension|reference"/>
    <!-- 列数,默认值为 3,当该值大于 3 并且数据源里只有四张图片时不会显示成 2 列 -->
    <attr name="bga_npl_itemSpanCount" format="integer"/>
</declare-styleable>

<declare-styleable name="BGAImageView">
    <!-- 默认图片资源,默认值为 null -->
    <attr name="android:src"/>
    <!-- 是否是圆形,默认值为 false -->
    <attr name="bga_iv_circle" format="boolean"/>
    <!-- 圆角矩形的半径,默认值为 0dp -->
    <attr name="bga_iv_cornerRadius" format="reference|dimension"/>
    <!-- 是否是矩形,默认值为 false -->
    <attr name="bga_iv_square" format="boolean"/>
    <!-- 描边的宽度,默认值为 0dp -->
    <attr name="bga_iv_borderWidth" format="reference|dimension"/>
    <!-- 描边的颜色,默认值为 Color.WHITE -->
    <attr name="bga_iv_borderColor" format="reference|color"/>
</declare-styleable>

详细用法请查看 Demo🐾

关于我

个人主页 邮箱 BGA系列开源库QQ群
bingoogolapple.cn [email protected] BGA_CODE_CLUB

打赏支持

如果您觉得 BGA 系列开源库帮你节省了大量的开发时间,请扫描下方的二维码随意打赏,要是能打赏个 10.24 🐵就太👍了。您的支持将鼓励我继续创作:octocat:

如果您目前正打算购买通往墙外的梯子,可以使用我的邀请码「YFQ9Q3B」购买 Lantern,双方都赠送三个月的专业版使用时间:beers:

License

Copyright 2016 bingoogolapple

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

   http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

bgaphotopicker-android's People

Contributors

bingoogolapple avatar clzd0792 avatar thewhitelight avatar wafer-li avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

bgaphotopicker-android's Issues

android4.4 预览图片,截屏图片可以显示,但是相机拍摄的图片不能显示大图

android4.4 预览图片,截屏图片可以显示,但是相机拍摄的图片不能显示大图。
1.BGASortableNinePhotoLayout显示正常
2.BGAPhotoPickerActivity 显示正常
3.BGAPhotoPickerPreviewActivity === > 黑屏 不能显示图片(截屏的图片,和网络图片没问题)
图片大小1~5M,只要是手机拍摄的都不能显示大图

另外:下载的demo也不能显示大图!!!

提示:W/OpenGLRenderer: Bitmap too large to be uploaded into a texture (4208x3120, max=4096x4096)

滑动卡段

将这个放在列表,发现滑动能卡顿,有什么优化方案吗

problem found in LeGu secure test 乐固中的安全测试

0zc7su 5r0s xce_n k m
BGAPhotoPickerUtil.sApp.sendBroadcast(mediaScanIntent);
(包名:cn.bingoogolapple.photopicker.util 类名:BGAImageCaptureManager 方法名:refreshGallery 行数:61)

修复建议:如果Intent中包含敏感信息,那么在sendBroadCast之前需要显式指定component

关于启用拍照的功能

启用拍照相机功能,传入文件目录即可,但是我启用了,提示:当前设备不支持发送图片 是什么意思?为什么会这样?我看您的demo没问题。

oom的问题

FATAL EXCEPTION: main
java.lang.OutOfMemoryError
at android.graphics.BitmapFactory.nativeDecodeAsset(Native Method)
at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:500)
at android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:353)
at android.graphics.drawable.Drawable.createFromResourceStream(Drawable.java:781)
at android.content.res.Resources.loadDrawable(Resources.java:1935)
at android.content.res.Resources.getDrawable(Resources.java:659)
at com.bumptech.glide.request.GenericRequest.getPlaceholderDrawable(GenericRequest.java:416)
at com.bumptech.glide.request.GenericRequest.begin(GenericRequest.java:276)
at com.bumptech.glide.manager.RequestTracker.runRequest(RequestTracker.java:37)
at com.bumptech.glide.GenericRequestBuilder.into(GenericRequestBuilder.java:661)
at com.bumptech.glide.GenericRequestBuilder.into(GenericRequestBuilder.java:697)
at com.bumptech.glide.BitmapRequestBuilder.into(BitmapRequestBuilder.java:498)
at cn.bingoogolapple.photopicker.imageloader.BGAGlideImageLoader.displayImage(BGAGlideImageLoader.java:60)
at cn.bingoogolapple.photopicker.imageloader.BGAImage.displayImage(BGAImage.java:50)
at cn.bingoogolapple.photopicker.widget.BGANinePhotoLayout.setData(BGANinePhotoLayout.java:118)
at com.qinqinhealth.qinqinhealth.ui.adapter.ZhiLiaoAdapter.loadGridItem(ZhiLiaoAdapter.java:332)
at com.qinqinhealth.qinqinhealth.ui.adapter.ZhiLiaoAdapter.onBindViewHolder(ZhiLiaoAdapter.java:165)
at android.support.v7.widget.RecyclerView$Adapter.onBindViewHolder(RecyclerView.java:5768)
at android.support.v7.widget.RecyclerView$Adapter.bindViewHolder(RecyclerView.java:5801)
at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:5037)
at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:4913)
at android.support.v7.widget.LinearLayoutManager$LayoutState.next(LinearLayoutManager.java:2029)
at android.support.v7.widget.LinearLayoutManager.layoutChunk(LinearLayoutManager.java:1414)
at android.support.v7.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1377)
at android.support.v7.widget.LinearLayoutManager.scrollBy(LinearLayoutManager.java:1193)
at android.support.v7.widget.LinearLayoutManager.scrollVerticallyBy(LinearLayoutManager.java:1043)
at android.support.v7.widget.RecyclerView$ViewFlinger.run(RecyclerView.java:4357)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:725)
at android.view.Choreographer.doCallbacks(Choreographer.java:555)
at android.view.Choreographer.doFrame(Choreographer.java:524)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:711)
at android.os.Handler.handleCallback(Handler.java:615)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:4745)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
at dalvik.system.NativeStart.main(Native Method)
10-27 18:33:06.700 1383-1418/system_process E/InputDispatcher: channel 'b557fab0 com.qinqinhealth.qinqinhealth/com.qinqinhealth.qinqinhealth.ui.activity.MainActivity (server)' ~ Channel is unrecoverably broken and will be disposed!
10-27 18:33:06.730 1383-8092/system_process E/JavaBinder: !!! FAILED BINDER TRANSACTION !!!
10-27 18:33:06.730 1383-8092/system_process E/JavaBinder: !!! FAILED BINDER TRANSACTION !!!
10-27 18:35:07.830 1383-1397/system_process E/JavaBinder: !!! FAILED BINDER TRANSACTION !!!
10-27 18:36:34.330 1383-1470/system_process E/ThrottleService: problem during onPollAlarm: java.lang.IllegalStateException: problem parsing stats: java.io.FileNotFoundException: /proc/net/xt_qtaguid/iface_stat_all: open failed: ENOENT (No such file or directory)
10-27 18:37:07.890 18684-22005/? E/jdwp: Failed sending reply to debugger: Bad file number

4.1系统上的异常

java.lang.ClassCastException: android.support.v7.widget.TintContextWrapper cannot be cast to android.app.Activity
at cn.bingoogolapple.photopicker.imageloader.BGAGlideImageLoader.display(BGAGlideImageLoader.java:43)
at cn.bingoogolapple.photopicker.imageloader.BGAImage.display(BGAImage.java:64)
at cn.bingoogolapple.photopicker.imageloader.BGAImage.display(BGAImage.java:68)
at cn.bingoogolapple.photopicker.imageloader.BGAImage.display(BGAImage.java:72)
at cn.bingoogolapple.photopicker.imageloader.BGAImage.display(BGAImage.java:76)
at cn.bingoogolapple.photopicker.widget.BGANinePhotoLayout.setData(BGANinePhotoLayout.java:170)
at cn.bingoogolapple.photopicker.demo.activity.MomentListActivity$MomentAdapter.fillData(MomentListActivity.java:200)
at cn.bingoogolapple.photopicker.demo.activity.MomentListActivity$MomentAdapter.fillData(MomentListActivity.java:183)

Fragment里面不能用?

首先感谢大神的一系列的开源项目。我在fragment里面用,为啥设置了mPhotosSnpl.setDelegate(this);但是断点看这个delegate在点击添加图片的时候总是空,何解?

删除图片 怎么隐藏啊

不好意思 又碰到问题了,我做在显示页面的时候,找不到去掉 右上删除图片 的方法,我在布局文件设置
app:bga_snpl_deleteDrawable="@null" 没有用,setDeleteDrawableResId 也不能乱传id吧

在您的demo中 MomentAdapter 里面 并没有找到什么特别的方法

bug

在选择照片界面如果是带有相机的,如果已经选择了几张图片,此事在此进入图片选择点击拍照会清空之前所选的照片

无响应

在低端机型(sony 26ii)上很容易 anr 或者界面要过一阵子才能响应操作,每次卡住的时候,有很多 gc 日志输出,日志输出完成后就能响应界面操作了

07-20 16:39:27.275 26019-26019/cn.bingoogolapple.photopicker.demo D/dalvikvm: GC_EXPLICIT freed <1K, 10% free 13905K/15436K, paused 3ms+3ms, total 25ms
07-20 16:39:27.315 26019-26019/cn.bingoogolapple.photopicker.demo D/dalvikvm: GC_EXPLICIT freed <1K, 10% free 13905K/15436K, paused 1ms+6ms, total 38ms
07-20 16:39:27.355 26019-26019/cn.bingoogolapple.photopicker.demo D/dalvikvm: GC_EXPLICIT freed <1K, 10% free 13905K/15436K, paused 3ms+2ms, total 33ms
07-20 16:39:27.385 26019-26019/cn.bingoogolapple.photopicker.demo D/dalvikvm: GC_EXPLICIT freed <1K, 10% free 13906K/15436K, paused 1ms+3ms, total 24ms
07-20 16:39:27.405 26019-26019/cn.bingoogolapple.photopicker.demo D/dalvikvm: GC_EXPLICIT freed <1K, 10% free 13906K/15436K, paused 1ms+3ms, total 24ms
07-20 16:39:27.435 26019-26019/cn.bingoogolapple.photopicker.demo D/dalvikvm: GC_EXPLICIT freed <1K, 10% free 13906K/15436K, paused 2ms+3ms, total 25ms
07-20 16:39:27.475 26019-26019/cn.bingoogolapple.photopicker.demo D/dalvikvm: GC_EXPLICIT freed <1K, 10% free 13905K/15436K, paused 2ms+4ms, total 37ms
07-20 16:39:27.505 26019-26019/cn.bingoogolapple.photopicker.demo D/dalvikvm: GC_EXPLICIT freed <1K, 10% free 13905K/15436K, paused 3ms+3ms, total 32ms
07-20 16:39:27.545 26019-26019/cn.bingoogolapple.photopicker.demo D/dalvikvm: GC_EXPLICIT freed <1K, 10% free 13906K/15436K, paused 2ms+4ms, total 36ms
07-20 16:39:27.565 26019-26019/cn.bingoogolapple.photopicker.demo D/dalvikvm: GC_EXPLICIT freed <1K, 10% free 13906K/15436K, paused 1ms+2ms, total 25ms
07-20 16:39:27.595 26019-26019/cn.bingoogolapple.photopicker.demo D/dalvikvm: GC_EXPLICIT freed <1K, 10% free 13906K/15436K, paused 1ms+3ms, total 24ms
07-20 16:39:27.615 26019-26019/cn.bingoogolapple.photopicker.demo D/dalvikvm: GC_EXPLICIT freed <1K, 10% free 13906K/15436K, paused 2ms+3ms, total 24ms
07-20 16:39:27.645 26019-26019/cn.bingoogolapple.photopicker.demo D/dalvikvm: GC_EXPLICIT freed <1K, 10% free 13906K/15436K, paused 2ms+3ms, total 28ms
07-20 16:39:27.675 26019-26019/cn.bingoogolapple.photopicker.demo D/dalvikvm: GC_EXPLICIT freed <1K, 10% free 13906K/15436K, paused 2ms+2ms, total 30ms
07-20 16:39:27.715 26019-26019/cn.bingoogolapple.photopicker.demo D/dalvikvm: GC_EXPLICIT freed <1K, 10% free 13906K/15436K, paused 2ms+2ms, total 37ms
07-20 16:39:27.775 26019-26019/cn.bingoogolapple.photopicker.demo D/dalvikvm: GC_EXPLICIT freed <1K, 10% free 13905K/15436K, paused 3ms+6ms, total 48ms
07-20 16:39:27.805 26019-26019/cn.bingoogolapple.photopicker.demo D/dalvikvm: GC_EXPLICIT freed <1K, 10% free 13905K/15436K, paused 3ms+3ms, total 34ms
07-20 16:39:27.835 26019-26019/cn.bingoogolapple.photopicker.demo D/dalvikvm: GC_EXPLICIT freed <1K, 10% free 13906K/15436K, paused 2ms+3ms, total 25ms
07-20 16:39:27.855 26019-26019/cn.bingoogolapple.photopicker.demo D/dalvikvm: GC_EXPLICIT freed <1K, 10% free 13905K/15436K, paused 1ms+2ms, total 24ms
07-20 16:39:27.885 26019-26019/cn.bingoogolapple.photopicker.demo D/dalvikvm: GC_EXPLICIT freed <1K, 10% free 13906K/15436K, paused 1ms+3ms, total 24ms
07-20 16:39:27.915 26019-26019/cn.bingoogolapple.photopicker.demo D/dalvikvm: GC_EXPLICIT freed <1K, 10% free 13906K/15436K, paused 2ms+4ms, total 34ms
07-20 16:39:27.955 26019-26019/cn.bingoogolapple.photopicker.demo D/dalvikvm: GC_EXPLICIT freed <1K, 10% free 13906K/15436K, paused 3ms+3ms, total 33ms
07-20 16:39:27.975 26019-26019/cn.bingoogolapple.photopicker.demo D/dalvikvm: GC_EXPLICIT freed <1K, 10% free 13906K/15436K, paused 1ms+3ms, total 23ms
07-20 16:39:28.005 26019-26019/cn.bingoogolapple.photopicker.demo D/dalvikvm: GC_EXPLICIT freed <1K, 10% free 13906K/15436K, paused 2ms+3ms, total 24ms
07-20 16:39:28.025 26019-26019/cn.bingoogolapple.photopicker.demo D/dalvikvm: GC_EXPLICIT freed <1K, 10% free 13906K/15436K, paused 2ms+2ms, total 24ms
07-20 16:39:28.055 26019-26019/cn.bingoogolapple.photopicker.demo D/dalvikvm: GC_EXPLICIT freed <1K, 10% free 13906K/15436K, paused 1ms+3ms, total 24ms
07-20 16:39:28.075 26019-26019/cn.bingoogolapple.photopicker.demo D/dalvikvm: GC_EXPLICIT freed <1K, 10% free 13906K/15436K, paused 1ms+3ms, total 23ms
07-20 16:39:28.105 26019-26019/cn.bingoogolapple.photopicker.demo D/dalvikvm: GC_EXPLICIT freed <1K, 10% free 13906K/15436K, paused 2ms+2ms, total 24ms
07-20 16:39:28.125 26019-26019/cn.bingoogolapple.photopicker.demo D/dalvikvm: GC_EXPLICIT freed <1K, 10% free 13905K/15436K, paused 2ms+3ms, total 25ms
07-20 16:39:28.155 26019-26019/cn.bingoogolapple.photopicker.demo D/dalvikvm: GC_EXPLICIT freed <1K, 10% free 13905K/15436K, paused 2ms+3ms, total 25ms
07-20 16:39:28.175 26019-26019/cn.bingoogolapple.photopicker.demo D/dalvikvm: GC_EXPLICIT freed <1K, 10% free 13905K/15436K, paused 1ms+2ms, total 24ms
07-20 16:39:28.275 26019-26019/cn.bingoogolapple.photopicker.demo D/dalvikvm: GC_EXPLICIT freed <1K, 10% free 13905K/15436K, paused 2ms+18ms, total 92ms
07-20 16:39:28.365 26019-26019/cn.bingoogolapple.photopicker.demo I/Choreographer: Skipped 336 frames! The application may be doing too much work on its main thread.
07-20 16:39:33.715 26019-26039/cn.bingoogolapple.photopicker.demo D/dalvikvm: GC_EXPLICIT freed 8K, 10% free 13905K/15436K, paused 3ms+9ms, total 60ms

建议

这个图片选择器写的真的是太好了,如果能再加上一个图片编辑的功能(比如说图片裁剪,涂鸦)就更好了。希望大神有空的时候能够在选择图片的时候加上这个功能。那就更完美了!

运行demo出现bug

选择完图片删除的时候,崩溃了。
配上截图:
96151462-6636-414e-b6bc-c91f65dc0f0b
好像是在点击删除按钮后立即再点一次出现的,不是一定会出现,但是如果点击删除之后当前图片没有消失之前再次点击就崩了。
希望作者有空修一修,其他都做得很好。

建议

去掉GuideView右边的空白部分
建议可以自己设置GuideView的item间距
有时自定义列数后进入添加朋友圈界面“加号图片”变小望修复,如果不设置列数,正常
拍照后添加图库的相片可以成功,但是先添加图库的相片再拍照就会清空列表的所有相片

图片选择时出现的bug

我使用的是魅蓝note3,android版本是5.1的,运行你最新的demo的时候,在
image
,很多图片都没有显示出来,我看了一下,那些都是拍照的照片,比较大。

然后还想问一下作者一个问题,我之前很早的时候就集成了你的库,我是通过module方式集成的,之前你的library就只有cn/bingoogolapple/photopicker这一个包,现在多出来了一个uk/co/senab/photoview这个包。所以想知道一下,你这个新添加的包是不是只是用于图片显示,我不去导入是不是应该也没问题呢?

咨询一下图片预览的问题

如图所示:
screenshot_20170326-185558
有没有什么设置可以去除右上角的“确定”,以及右下角的“选择”。鄙人认为图片展示不需要这些,有左上角的信息应该足够了。

图片预览滑动卡顿

应该是有图片过大,然后在客户端没做相应的处理,完全加载的原图导致的。。希望作者能够处理一下。。

不确定直接返回出错

Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.TextView.setEnabled(boolean)' on a null object reference
at cn.bingoogolapple.photopicker.activity.BGAPhotoPickerActivity.renderTopRightBtn(BGAPhotoPickerActivity.java:314)
at cn.bingoogolapple.photopicker.activity.BGAPhotoPickerActivity.onActivityResult(BGAPhotoPickerActivity.java:301)
at android.app.Activity.dispatchActivityResult(Activity.java:6161)
at android.app.ActivityThread.deliverResults(ActivityThread.java:3620)
at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2967) 
at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:3028) 
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2391) 
at android.app.ActivityThread.access$800(ActivityThread.java:148) 
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1292) 
at android.os.Handler.dispatchMessage(Handler.java:102) 
at android.os.Looper.loop(Looper.java:135) 
at android.app.ActivityThread.main(ActivityThread.java:5310) 
at java.lang.reflect.Method.invoke(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:372) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:901) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:696) 

图标变大

预览图片保存后的图片比实际的大很多。

相册选择bug

相册选择带拍照的时候,上下滑动照片,拍照的图片会变成其他的图片

扫描二维码下载demo拍照功能图片不能显示gif图如下

qq 20170406103503
qq 20170406103514
我这个demo.apk是在你贴在上面的二维码下载下来的,拍照完成后图片并没有显示出来,显示的是那张默认图片,但是其实图片已经拍照保存在图库的文件夹里了,不知道什么情况,如果看到麻烦解答下,谢谢!

写的很帅

写的很帅,就是选择图片时读取的太慢了

关于需求

可不可以将拍照跟相册分开呀?也就是在外部可以点击拍照,然后图片就添加上去,这是点击相册还能够同步选中刚刚拍的照片?

快速点击删除按钮崩溃

快速点击删除按钮后崩溃
FATAL EXCEPTION: main
Process: com.jf.qszypy, PID: 31191
java.lang.ArrayIndexOutOfBoundsException: length=12; index=-1
at java.util.ArrayList.get(ArrayList.java:310)
at cn.bingoogolapple.androidcommon.adapter.BGARecyclerViewAdapter.getItem(BGARecyclerViewAdapter.java:132)
at cn.bingoogolapple.photopicker.widget.BGASortableNinePhotoLayout$PhotoAdapter.getItem(BGASortableNinePhotoLayout.java:332)
at cn.bingoogolapple.photopicker.widget.BGASortableNinePhotoLayout.onItemChildClick(BGASortableNinePhotoLayout.java:276)

报这个错误

删除选择图片背景错位

运行demo,从图片库里选择两张图片,然后将第二张和第一张调换位置(或者第一张与第二张调换位置),再依次删除图片,“+”选择图片背景就和之前选择图片重叠了。希望有空解决一下,多谢!

报错的问题,很多人都有

Process: cn.bingoogolapple.photopicker.demo, PID: 29317
java.lang.ClassCastException: android.support.v7.widget.TintContextWrapper cannot be cast to android.app.Activity
at cn.bingoogolapple.photopicker.imageloader.BGAGlideImageLoader.display(BGAGlideImageLoader.java:43)
at cn.bingoogolapple.photopicker.imageloader.BGAImage.display(BGAImage.java:64)
at cn.bingoogolapple.photopicker.imageloader.BGAImage.display(BGAImage.java:68)
at cn.bingoogolapple.photopicker.imageloader.BGAImage.display(BGAImage.java:72)
at cn.bingoogolapple.photopicker.imageloader.BGAImage.display(BGAImage.java:76)
at cn.bingoogolapple.photopicker.widget.BGANinePhotoLayout.setData(BGANinePhotoLayout.java:170)
at cn.bingoogolapple.photopicker.demo.activity.MomentListActivity$MomentAdapter.fillData(MomentListActivity.java:201)
at cn.bingoogolapple.photopicker.demo.activity.MomentListActivity$MomentAdapter.fillData(MomentListActivity.java:184)

崩溃

一进项目就崩溃,在BGAGlideImageLoader类
java.lang.ClassCastException: android.support.v7.widget.TintContextWrapper cannot be cast to android.app.Activity
at cn.bingoogolapple.photopicker.imageloader.BGAGlideImageLoader.display(BGAGlideImageLoader.java:43)

求大神指导

图片加载较慢

你好 , 当手机的图片较多时,进入图片选择界面时需要等待很长时间才能加载完数据, 请问这个问题能够怎么解决呢, 有没有什么解决思路 ,请指教?谢谢

使用该项目的demo的时候,发现一些问题

你好,你的这个picker封装的很有水平,不过在使用该项目的demo的时候,发现存在一些问题:

  1. 在添加朋友圈界面,初始状态不像微信一样有个+的添加标志,是一片空白,需要点击选择图片才能进入图片选择界面,这样子使用不是很方便。而在选择了图片回到添加朋友圈界面时,那个+的添加标志又出现了,这种体验挺奇怪的。
    image
    image
  2. 在选择玩图片之后,点击图片右上角的删除按钮之后,在所删除的图片还未完全消失之前,如果再次点击该图片,此界面会奔溃,控制台会输出
    image
    这一点需要进行完善。

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.