android点击事件图片选择器,GitHub - walkermanx/PhotoPicker: 一款Android图片选择器,支持直接拍照、拍照并裁剪、单选裁剪、图片多选、图片放大预览、裁剪比例设...

PhotoPicker: Android图片选择器 (仿微信图片选择器)

68747470733a2f2f696d672e736869656c64732e696f2f62616467652f50686f746f5069636b65722d312e312e302d627269676874677265656e2e7376673f7374796c653d706c6173746963

68747470733a2f2f696d672e736869656c64732e696f2f62616467652f2545372541452538302545342542392541362d354d616c6c2d6f72616e67652e7376673f7374796c653d706c617374696326636f6c6f72413d66323731356626636f6c6f72423d313062323363

一款Android图片选择器,支持直接拍照、拍照并裁剪、单选裁剪、图片多选、图片放大预览、裁剪比例设置等,满足APP图片拍照、选择等模块需求。

ps:该项目是在q805699513同学仓库的基础上优化修改而来 在此特别感谢 因为项目自定义的需要 所以在其源码的基础上进行了一些优化以及修改以便满足项目需求

主要优化如下:

1. 更新了glide到最新的4.8.0

2. 更新了uCrop依赖到2.2.2

3. 更新项目gradle到3.1.4

4. 修复原有照片选取页面通过代码设置 ToolBar背景、StatusBar色以及ToolBar文本/icon着色无效的bug

5. 在原有ToolBar StatusBar 以及ToolBar文本颜色可通过代码设置的基础上 新增通过读取theme设置来设置三者的属性数值

6. 单选照片且需要剪裁照片时 隐藏照片选取页面照片选择框以及顶部右侧文本

7. 图片预览页同样支持主题和代码设置主题色 ToolBar背景、StatusBar色以及ToolBar文本/icon着色

8. PhotoView和PhotoPicker新增toolBar标题与navigateIcon边距设置

9. 优化依赖传递关系

演示:

1.gif?raw=trueeccd951081386a148d58c70715724d46.png3.gif?raw=true

引入:

1. 在项目的根目录中找到 build.gradle 文件 (不是module的build.gradle文件 ),加入如下代码:

allprojects {

repositories {

maven { url 'https://jitpack.io' }

}

}

2. 在你的项目module的build.gradle文件中引入依赖:

implementation 'com.github.walkermanx:PhotoPicker:1.1.0'

使用:

拍照并裁剪

PhotoPicker.builder()

//直接拍照

.setOpenCamera(true)

//拍照后裁剪

.setCrop(true)

//设置裁剪比例(X,Y)

//.setCropXY(1, 1)

//设置主题色系 toolBar背景色 statusBar颜色 以及toolBar 文本/overflow Icon着色

.setThemeColors(R.color.colorPrimary, R.color.colorPrimaryDark, android.R.color.holo_red_dark)

//设置toolBar标题栏于NavigationIcon的边距

.setToolbarTitleMarginStart(R.dimen.__picker_toolbar_title_margin_start)

.start(MainActivity.this);

单选并裁剪

PhotoPicker.builder()

//设置图片选择数量

.setPhotoCount(1)

//取消选择时点击图片浏览

.setPreviewEnabled(false)

//开启裁剪

.setCrop(true)

//设置裁剪比例(X,Y)

.setCropXY(1, 1)

.start(MainActivity.this);

图片多选

private ArrayList selectedPhotos = new ArrayList<>();

PhotoPicker.builder()

//设置选择个数

.setPhotoCount(9)

//选择界面第一个显示拍照按钮

.setShowCamera(true)

//选择时点击图片放大浏览

.setPreviewEnabled(true)

//附带已经选中过的图片

.setSelected(selectedPhotos)

.start(MainActivity.this);

//多选返回图片后对ArrayList selectedPhotos里的数据操作可达到删除所选择的图片。

大图浏览

//多选选中图片后点击进入大图浏览界面以及标题栏显示删除按钮

PhotoPreview.builder()

//附带已经选中过的图片

.setPhotos(selectedPhotos)

//设置要浏览图片的第position张

.setCurrentItem(position)

//设置主题色系 toolBar背景色 statusBar颜色 以及toolBar 文本/overflow Icon着色

.setThemeColors(R.color.colorPrimary, R.color.colorPrimaryDark, android.R.color.holo_red_dark)

//设置toolBar标题栏于NavigationIcon的边距

.setToolbarTitleMarginStart(R.dimen.__picker_toolbar_title_margin_start)

.start(MainActivity.this);

//图片浏览,全屏模式

ArrayList imgData = new ArrayList<>();

PhotoPreview.builder()

//设置浏览的图片数据

.setPhotos(imgData)

//设置点击后浏览的是第几张图

.setCurrentItem(position)

//浏览时不要标题栏

//setShowDeleteButton浏览时显示删除按钮.

.setShowToolbar(false)

//设置主题色系 toolBar背景色 statusBar颜色 以及toolBar 文本/overflow Icon着色

.setThemeColors(R.color.colorPrimary, R.color.colorPrimaryDark, android.R.color.holo_red_dark)

//设置toolBar标题栏于NavigationIcon的边距

.setToolbarTitleMarginStart(R.dimen.__picker_toolbar_title_margin_start)

//开启浏览时长按后显示PopuWindow,分享、保存、取消 等,可以自定义。

.setOnLongClickListData(onLongClickListData)

.start(PreViewImgActivity.this);

大图浏览长按显示PopuWindow

使用参考类

//放大预览后可长按图片进行下载、分享、取消(示例)等(自定义)操作,已将选择事件回调回Activity(可根据需求自定义)

.setOnLongClickListData(onLongClickListData)

private ArrayList onLongClickListData = new ArrayList<>();

//activity或者fragment里图片浏览时使用

onLongClickListData.add("分享");

onLongClickListData.add("保存");

onLongClickListData.add("取消");

//图片长按后的item点击事件回调

PhotoOnLongClickManager photoOnLongClickManager = PhotoOnLongClickManager.getInstance();

photoOnLongClickManager.setOnLongClickListener(new PhotoOnLongClick() {

@Override

public void sendOnLongClick(int position, String path) {

//自己实现分享或者保存等自定义操作

Toast.makeText(PreViewImgActivity.this, "你点击了:" + onLongClickListData.get(position) + ",图片路径:" + path, Toast.LENGTH_LONG).show();

}

});

//图片浏览API设置

//.setOnLongClickListData(onLongClickListData)

图片返回

@Override

protected void onActivityResult(int requestCode, int resultCode, Intent data) {

super.onActivityResult(requestCode, resultCode, data);

//选择返回

if (resultCode == RESULT_OK &&

(requestCode == PhotoPicker.REQUEST_CODE || requestCode == PhotoPreview.REQUEST_CODE)) {

iv_crop.setVisibility(View.GONE);

recyclerView.setVisibility(View.VISIBLE);

List photos = null;

if (data != null) {

photos = data.getStringArrayListExtra(PhotoPicker.KEY_SELECTED_PHOTOS);

}

selectedPhotos.clear();

if (photos != null) {

selectedPhotos.addAll(photos);

}

photoAdapter.notifyDataSetChanged();

}

//拍照功能或者裁剪后返回

if (resultCode == RESULT_OK && requestCode == PhotoPicker.CROP_CODE) {

iv_crop.setVisibility(View.VISIBLE);

recyclerView.setVisibility(View.GONE);

Glide.with(getApplicationContext()).load(Uri.fromFile(new File(data.getStringExtra(PhotoPicker.KEY_CAMEAR_PATH)))).into(iv_crop);

}

}

manifest //设置权限以及注册Activity

>

...

>

...

android:name="com.walkermanx.photopicker.PhotoPickerActivity"

android:screenOrientation="portrait"

android:theme="@style/PhotoTheme" />

android:name="com.walkermanx.photopicker.PhotoPagerActivity"

android:screenOrientation="portrait"

android:theme="@style/PhotoTheme"/>

android:name="com.yalantis.ucrop.UCropActivity"

android:screenOrientation="portrait"/>

自定义设置样式 设置图片选择界面样式(@style/PhotoTheme样式) 请通过color引用设置颜色值

values/styles.xml

@color/colorPrimary

@color/colorPrimaryDark

@color/colorControlNormal

Proguard

# Glide

-keep public class * implements com.bumptech.glide.module.GlideModule

-keep public class * extends com.bumptech.glide.module.AppGlideModule

-keep public enum com.bumptech.glide.load.ImageHeaderParser$** {

**[] $VALUES;

public *;

}

如果你的 target API 低于 Android API 27,请添加:

```pro

-dontwarn com.bumptech.glide.load.resource.bitmap.VideoDecoder

VideoDecoder 使用 API 27 的一些接口,这可能导致 proguard 发出警告,尽管这些 API 在旧版 Android 设备上根本不会被调用。

如果你使用 DexGuard 你可能还需要添加:

# for DexGuard only

-keepresourcexmlelements manifest/application/meta-data@value=GlideModule [详细配置请查看glide官网文档](https://muyangmin.github.io/glide-docs-cn/doc/download-setup.html)

# nineoldandroids

-keep interface com.nineoldandroids.view.** { *; }

-dontwarn com.nineoldandroids.**

-keep class com.nineoldandroids.** { *; }

# support-v7-appcompat

-keep public class android.support.v7.widget.** { *; }

-keep public class android.support.v7.internal.widget.** { *; }

-keep public class android.support.v7.internal.view.menu.** { *; }

-keep public class * extends android.support.v4.view.ActionProvider {

public (android.content.Context);

}

# support-design

-dontwarn android.support.design.**

-keep class android.support.design.** { *; }

-keep interface android.support.design.** { *; }

-keep public class android.support.design.R$* { *; }

# ucrop

-dontwarn com.yalantis.ucrop**

-keep class com.yalantis.ucrop** { *; }

-keep interface com.yalantis.ucrop** { *; }

-ignorewarnings

Thanks

License

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.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值