<Android 开源库> PhotoPicker 从头到脚
来源:互联网 发布:淘宝上好看的女装 编辑:程序博客网 时间:2024/05/18 15:54
1. 简介
PhotoPicker, 是一款开源的图片选择器。效果上和微信相似。
2. 使用方法
2.1 添加依赖
dependencies { compile 'me.iwf.photopicker:PhotoPicker:0.9.5@aar' compile 'com.android.support:appcompat-v7:23.4.0' compile 'com.android.support:recyclerview-v7:23.4.0' compile 'com.android.support:design:23.4.0' compile 'com.nineoldandroids:library:2.4.0' compile 'com.github.bumptech.glide:glide:3.7.0'}
- appcompat-v7version >= 23.0.0
或者使用download源码,然后使用module依赖,我平时使用是这种方式。
dependencies { ... compile project(':PhotoPicker') ...}
2.2 代码集成
如下内容来自Github介绍
- Pick Photo
PhotoPicker.builder() .setPhotoCount(9) .setShowCamera(true) .setShowGif(true) .setPreviewEnabled(false) .start(this, PhotoPicker.REQUEST_CODE);
- Preview Photo
ArrayList<String> photoPaths = ...;PhotoPreview.builder() .setPhotos(selectedPhotos) .setCurrentItem(position) .setShowDeleteButton(false) .start(MainActivity.this);
- onActivityResult
@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (resultCode == RESULT_OK && requestCode == PhotoPicker.REQUEST_CODE) { if (data != null) { ArrayList<String> photos = data.getStringArrayListExtra(PhotoPicker.KEY_SELECTED_PHOTOS); } }}
- AndroidManifest.xml
<manifest xmlns:android="http://schemas.android.com/apk/res/android" > <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.CAMERA" /> <application ... > ... <activity android:name="me.iwf.photopicker.PhotoPickerActivity" android:theme="@style/Theme.AppCompat.NoActionBar" /> <activity android:name="me.iwf.photopicker.PhotoPagerActivity" android:theme="@style/Theme.AppCompat.NoActionBar"/> </application></manifest>
- Custom Style
<style name="actionBarTheme" parent="ThemeOverlay.AppCompat.Dark.ActionBar"> <item name="android:textColorPrimary">@android:color/primary_text_light</item> <item name="actionBarSize">@dimen/actionBarSize</item></style><style name="customTheme" parent="Theme.AppCompat.Light.NoActionBar"> <item name="actionBarTheme">@style/actionBarTheme</item> <item name="colorPrimary">#FFA500</item> <item name="actionBarSize">@dimen/actionBarSize</item> <item name="colorPrimaryDark">#CCa500</item></style>
- ProGuard
# Glide-keep public class * implements com.bumptech.glide.module.GlideModule-keep public enum com.bumptech.glide.load.resource.bitmap.ImageHeaderParser$** { **[] $VALUES; public *;}# 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 <init>(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$* { *; }
3. 源码分析
3.1 代码结构
- 类说明(按照功能)
3.2 源码设计思路
从代码结构和使用方法上来看,PhotoPicker是将图片选择作为一个单独的功能模块解耦出来,以Activity的形式进行PhotoPicker或者是PhotoPreview,在合适的位置创建Intent显示启动PhotoPagerAcitivty(预览)或者是PhotoPickerActivity(选择图片)。针对图片选择的场景,通过onActivityResult得到所选图片的Path。
- PhotoPicker
- PhotoPreview
- Build设计模式
PhotoPicker和PhotoPreview都是采用的Build设计模式。利用构建者模式,可以清晰的管理参数,层次清晰,增加代码的可读性,Android源码系统中也有此模式的大量使用,如AlertDialog.Builder等等。
PhotoPickerBuilder和PhotoPreviewBuilder正式采用的这种设计模式。
- Loader机制
loader机制,包括LoaderManager,Loader,LoaderCallbacks三部分,
LoaderManager 来管理我们的laoder实例,获取来初始化,重启一个loader,
Loader 来执行我们的异步操作,有开始,完成,后台等接口实现
LoaderCallbacks 来执行我们的loader回调,主要是绑定分发Loader,完成加载,重置数据等
MediaStoreHelper中只有一个方法getPhotoDirs,方法中使用
activity.getSupportLoaderManager()
.initLoader(0, args,
new PhotoDirLoaderCallbacks(activity, resultCallback));
的方式初始化Loader,然后在
PhotoDirLoaderCallbacks实现
LoaderManager.LoaderCallbacks< Cursor>接口。onCreateLoader方法中创建PhotoDirectoryLoader并传入参数,onLoadFinished返回后台数据库查询结果。
4. 备注
PhotoPicker,可以满足日常开发需求,代码结构非常清晰,可以直接根据自己的需求在源码上进行定制修改。感谢大神的开源精神。
个人微信公众号:Learning_Of_ALL,欢迎大家扫码关注,Android技术交流。
1 0
- <Android 开源库> PhotoPicker 从头到脚
- <Android开源库> PagerSlidingTabStrip从头到脚
- <Android 开源库> FlycoTabLayout 从头到脚
- android 图片选择器 photopicker
- <Android 开源库> Matisse,来自知乎的PhotoPicker
- Android带多选功能的PhotoPicker
- <Android 基础(三十四)> TabLayout 从头到脚
- Android图片选择和浏览组件:PhotoPicker
- Android笔记:一个仿微信的Android图片选择组件:PhotoPicker
- 一个仿微信的Android图片选择组件:PhotoPicker
- 一个仿微信的Android图片选择组件:PhotoPicker
- 一个仿微信的Android图片选择组件:PhotoPicker
- Android简单实现仿微信选择图片以及拍照(PhotoPicker)
- 面试从头到脚
- Android中多图片选择器PhotoPicker库的使用(仿微信,秒杀MultiImageSelector)
- 图片选择器photopicker框架
- Android中多图片选择器PhotoPicker库的使用(仿微信,秒杀MultiImageSelector)自己修改的多选
- 关于PhotoPicker的改造(以PhotoPicker为基础)
- 如何做到简历中要求的 “要有扎实的 Java 基础
- 树状数组
- int 与 byte 的强制类型转换
- Android Arm Inline Hook
- apache CentOS Permission denied: AH00072
- <Android 开源库> PhotoPicker 从头到脚
- spring mvc实战系列教程(5)--将对象转换为XML输出
- [Leetcode] 115. Distinct Subsequences 解题报告
- IDEA破解
- 一个MySQL表真的最多只能够有24个字段吗?反正我不信
- 数据库笔记 4
- 欢迎使用CSDN-markdown编辑器
- 局域网计算机间进行通信都经历了什么
- java并发编程之volatile关键字解析