第三方开源库:TakePhoto + pickphotoview + Album

这篇博客主要收集有关图片选择器的library

TakePhoto

github项目地址:https://github.com/crazyandcoder/TakePhoto
简书地址:android 开源项目—TakePhoto

对于每个APP基本上都有一个头像上传的功能,对于如何获取头像照片,可以通过使用本地相册或者拍照获取,而是用原生的相机功能都会或多或少遇到一些问题,因此特地封装了相机和相册功能,使用简单,方便,只需要简单的几行代码就可以获取图片。

效果图

这里写图片描述

主要亮点

  • 可以进行拍照或者从本地相册获取图片
  • 可以对已经选中的图片进行编辑、如裁剪、放大、缩小等操作
  • 直接返回选中图片的地址,方便后续操作,如上传服务器等。

gradle

api>=14

compile 'liji.library.dev:takephotolib:1.0.2'

//glide是为了演示效果,takephotolib不依赖glide
compile 'com.github.bumptech.glide:glide:3.7.0'

代码示例

下面的代码在点击事件中。就这几行代码就可以搞定图片编辑、如裁剪、放大、缩小等操作,非常方便,作者很给力。

TakePhoto takePhoto = new TakePhoto(MainActivity.this);
takePhoto.setOnPictureSelected(new TakePhoto.onPictureSelected() {
    @Override
    public void select(String path) {
        tv.setText("选择的图片地址:" + path);
        Glide.with(MainActivity.this).load("file://" + path).into(iv);
    }
});
takePhoto.show();

作者提供的使用方法代码在Main2Activity类中。

BUG

1三星手机(SM-G5500)获取不到图片资源

pickphotoview

github:https://github.com/Werb/PickPhotoSample

截图

这里写图片描述 这里写图片描述

使用

dependencies {
    ...
    compile 'com.werb.pickphotoview:pickphotoview:0.0.5-beta1'
}
findViewById(R.id.btn1).setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        new PickPhotoView.Builder(MainActivity.this)
                .setPickPhotoSize(9)
                .setShowCamera(true)
                .setSpanCount(5)
                .start();
    }
});
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (resultCode == 0) {
        return;
    }
    if (data == null) {
        return;
    }
    if (requestCode == PickConfig.PICK_PHOTO_DATA) {
        List<String> selectPaths = (List<String>) data.getSerializableExtra(PickConfig.INTENT_IMG_LIST_SELECT);
        // do something u want
        Log.d(TAG, selectPaths.toString());
    }
}

集合中是图片的路径:
这里写图片描述

Album

Album是一个MD风格的开源相册,主要功能分为两部分:相册选图、画廊预览。
github地址:https://github.com/yanzhenjie/Album/blob/master/README-CN.md
Demo:http://git.oschina.net/libraryDemo/albumdemo

Demo

如果是调起画相册:使用Album.album(this).start()
如果是调起画廊:Album.gallery(this).start()

Demo:中用RecyclerView来显示获取的图片,在其点击事件中调起画廊

 mRecyclerView = (RecyclerView) findViewById(R.id.recyclerView);
mRecyclerView.setLayoutManager(new GridLayoutManager(this, 2));

Drawable drawable = ResourcesCompat.getDrawable(getResources(), R.drawable.decoration_white, null);
mRecyclerView.addItemDecoration(new AlbumVerticalGirdDecoration(drawable));

//        int itemSize = (DisplayUtils.screenWidth - (drawable.getIntrinsicWidth() * 4)) / 3;
//        int itemSize = (DisplayUtils.screenWidth) / 3;
int itemSize = getWindow().getWindowManager().getDefaultDisplay().getWidth()/2;
adapter = new MyAdapter(mImageList,itemSize);
mRecyclerView.setAdapter(adapter);

adapter.setOnItemClickListener(new MyAdapter.OnItemClickListener() {
    @Override
    public void onItemClick(View view, int position) {
        previewImage(position);
    }
});

下面是github README.md

特性

  1. 完美支持7.0,不存在Android7.0 FileUriExposedException
  2. 支持组件:ActivityFragment
  3. UI风格可以配置,比如:ToolbarStatusBarNavigationBar
  4. 单选、多选、文件夹预览、画廊、画廊缩放。
  5. 支持配置相册展示时的列数。
  6. 支持配置是否使用相机。
  7. 画廊预览选择的图片,预览时可以反选。
  8. 支持自定义LocalImageLoader,例如使用:GlidePicassoImageLoader实现。

效果预览

体验请下载demo的apk

依赖

  • Gradle:
compile 'com.yanzhenjie:album:1.0.2'

mainifest.xml中需要注册

<activity
    android:name="com.yanzhenjie.album.AlbumActivity"
    android:configChanges="orientation|keyboardHidden|screenSize"
    android:theme="@style/Theme.AppCompat.Light.NoActionBar"
    android:windowSoftInputMode="stateAlwaysHidden|stateHidden" />
  • 注意:1.0.0以上版本给这个activity配置的android:title=""属性会被自动忽略。
    在使用相册的时候可以动态设置相册的标题。

权限

<uses-permission android:name="android.permission.CAMERA"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
  • 开发者不需要担心Android6.0运行时权限,Album已经非常完善的处理过了。
  • 另外Android6.0运行时权限推荐使用:AndPermission,如果不使用6.0特性,建议把targetSdkVersion值设置的小于23,这样就不会使用Android6.0运行时权限了。

使用教程

Album主要功能分为两部分:相册选图、画廊预览,下面分别说明。

Album 相册

使用Album.album(this).start()即可调起相册。

Album.album(this)
    .requestCode(999) // 请求码,返回时onActivityResult()的第一个参数。
    .toolBarColor(toolbarColor) // Toolbar 颜色,默认蓝色。
    .statusBarColor(statusBarColor) // StatusBar 颜色,默认蓝色。
    .navigationBarColor(navigationBarColor) // NavigationBar 颜色,默认黑色,建议使用默认。
    .title("图库") // 配置title。

    .selectCount(9) // 最多选择几张图片。
    .columnCount(2) // 相册展示列数,默认是2列。
    .camera(true) // 是否有拍照功能。
    .checkedList(mImageList) // 已经选择过得图片,相册会自动选中选过的图片,并计数。
    .start();

重写onActivityResult()方法,接受图片选择结果:

ArrayList<String> mImageList;

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if(requestCode == 999) {
        if (resultCode == RESULT_OK) { // Successfully.
            // 不要质疑你的眼睛,就是这么简单。
            mImageList = Album.parseResult(data);
        } else if (resultCode == RESULT_CANCELED) { // User canceled.
            // 用户取消了操作。
        }
    }
}

使用Album.gallery(this).start()即可调起画廊,画廊只支持预览本地图片,你只需要传入一个图片集合:

Album.gallery(this)
    .requestCode(666) // 请求码,返回时onActivityResult()的第一个参数。
    .toolBarColor(toolbarColor) // Toolbar 颜色,默认蓝色。
    .statusBarColor(statusBarColor) // StatusBar 颜色,默认蓝色。
    .navigationBarColor(navigationBarColor) // NavigationBar 颜色,默认黑色,建议使用默认。

    .checkedList(mImageList) // 要预览的图片list。
    .currentPosition(position) // 预览的时候要显示list中的图片的index。
    .checkFunction(true) // 预览时是否有反选功能。
    .start();

注意:

  • 一定要传入要预览的图片集合,否则启动会立即返回。
  • 调用画廊预览时判断if(currentPosition < mImageList.size()),这样才能保证传入的positionlist中,否则会立即返回。

如果你需要预览时的反选功能,那么重写onActivityResult()方法,接受反选后的图片List结果:

ArrayList<String> mImageList;

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if(requestCode == 666) {
        if (resultCode == RESULT_OK) { // Successfully.
            // 不要再次质疑你的眼睛,还是这么简单。
            mImageList = Album.parseResult(data);
        } else if (resultCode == RESULT_CANCELED) { // User canceled.
            // 用户取消了操作。
        }
    }
}

高级配置

这个配置不是必须的,不配置也完全可以用,为了照顾强迫症同学,开放配置。

你的App如果使用了任何图片加载框架,比如:GlidePicassoImageLoader,你可以用他们自定义本地图片Loader,不过Album已经提供了一个默认的,所以你不配置也完全可以。

Album提供的默认的LocalImageLoader如下:

public class Application extends android.app.Application {
    @Override
    public void onCreate() {
        super.onCreate();

        Album.initialize(new AlbumConfig.Build()
                .setImageLoader(new LocalImageLoader()) // 使用默认loader.
                .build()
        );
    }
}

根据小伙伴们的测试情况,推荐使用优先级如下:

  1. LocalImageLoader
  2. Glide
  3. Picasso

最后我把用GlidePicasso的例子也给出来,当然Demo中也有,你也可以下载Demo看。

注意:只是在demo中用GlidePicasso提供了sample,Album库中并没有引入GlidePicasso

Glide

public class GlideImageLoader implements AlbumImageLoader {
    @Override
    public void loadImage(ImageView imageView, String imagePath, int width, int height) {
        Glide.with(imageView.getContext())
            .load(new File(imagePath))
            .into(imageView);
    }
}

...

Album.initialize(new AlbumConfig.Build()
    .setImageLoader(new GlideImageLoader()) // Use glide loader.
    .build()

Picasso

public class PicassoImageLoader implements AlbumImageLoader {

    @Override
    public void loadImage(ImageView imageView, String imagePath, int width, int height) {
        Picasso.with(imageView.getContext())
            .load(new File(imagePath))
            .centerCrop()
            .resize(width, height)
            .into(imageView);
    }
}

...

Album.initialize(new AlbumConfig.Build()
    .setImageLoader(new PicassoImageLoader()) // Use picasso loader.
    .build()

混淆

Album是完全可以混淆的,如果混淆后相册出现了问题,请在混淆规则中添加:

-dontwarn com.yanzhenjie.album.**
-keep class com.yanzhenjie.album.**{*;}

Matise

Matise github地址
运行sample没有问题,但是自己用就报错了。

PictureSelector

github: https://github.com/LuckSiege/PictureSelector
Demo:https://gitee.com/beifang2008/PictureSelector01.git

其他

多图片选择:MultiImageSelector
圆形图片:CircleImageView
TakePhoto + pickphotoview + Album +Matisse

  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
本产品为采用Mini2440开发板为硬件的简易型单任务操作系统,该产品的设计主要是用于《ARM体系结构与编程》阶段对整体知识的系统化应用,并掌握单任务系统的开发能力。 功能汇总 1开机检测 统上电/复位后,检测内存,若内存错误蜂鸣器报警提示,若内存正常,蜂鸣器响一声后进入系统。进入系统后,先显示芯片ID、系统主频、RO\RW\ZI起始地址及大小、字位置、Nandflsah总大小、Page大小等系统基本信息,并检测Nandflash坏块。然后自动播放相册图片。 2系统界面 系统界面标题栏显示个人信息及系统时间、有虚拟键盘和手写区域、系统状态栏则显示当前系统的状态信息。 3串口命令 可以接收、解析串口接收的指定格式的指令,系统受到指令后执行相应指令,并将指令执行结果发回 串口并在系统主界面上提示。系统处理的指令有:GetTime、SetTime、ReadMem、WriteMem、SendFile。 4虚拟键盘 键盘显示在主界面的下方,可以输入英文、数字、常用符号,能实现大小写转换、有退格、清屏、换能及对相册操作的功能键F1(进入相册文件浏览),F2(上翻页),F3(下翻页),F4(退出文件浏览)。 5手写测试 在手写区域内能正常划线,超出区域外划线无效,并定时清除该区域内容。 6系统时钟 在系统界面右上角,以每300毫秒一次的频率更新系统实时时钟信息。 7电子相册 把系统接收的bmp格式图片保存到Nandflash内,并建立图片文件索引。可以选择浏览图片,长时间不操作则自动播放图片。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值