• Stars
    star
    139
  • Rank 262,954 (Top 6 %)
  • Language
    Java
  • Created almost 8 years ago
  • Updated over 1 year ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

完全仿微信的图片选择,并且提供了多种图片加载接口,选择图片后可以旋转,可以裁剪成矩形或圆形,可以配置各种其他的参数

LQRImagePicker

完全仿微信的图片选择,并且提供了多种图片加载接口,选择图片后可以旋转,可以裁剪成矩形或圆形,可以配置各种其他的参数

一、简述:

本项目是基于ImagePicker完善及界面修改。 主要工作:

  1. 原项目中UI方面与微信有明显差别,如:文件夹选择菜单的样式就不是很美观,高度比例与微信的明显不同,故对其进行美化;

  2. 原项目在功能方面有一个致命的BUG,在一开始打开菜单后,随便点击一张图片就会直接崩溃(亲测4.4可用,但6.0直接崩溃),本项目已对此进行了解决;

  3. 编码方面,原项目中获取本地文件uri路径时,使用Uri.fromFile(),这种方式不好,控制台会一直报错(such file or directory no found),故使用Uri.parse()进行代替。

二、使用:

不得不说,原项目是一个非常不错的项目,有很多地方值得我们学习,其中图片的加载方案让我受益匪浅,通过定义一个接口,由第三方开发者自己在自己项目中实现,避免了在库中强制使用指定图片加载工具的问题,使得本项目的扩展性增强。当然也有其他值得学习的地方,在 ImagePicker中有详细的配置方式,如有更多需求请前往原项目查看学习。这里我只记录下我自己项目中的使用配置:

1、在自己项目中添加本项目依赖:

compile 'com.lqr.imagepicker:library:1.0.0'

2、实现ImageLoader接口(注意不是com.nostra13.universalimageloader.core.ImageLoader),实现图片加载策略:

/**
 * @创建者 CSDN_LQR
 * @描述 仿微信图片选择控件需要用到的图片加载类
 */
public class UILImageLoader implements com.lqr.imagepicker.loader.ImageLoader {
    
	@Override
    public void displayImage(Activity activity, String path, ImageView imageView, int width, int height) {
        ImageSize size = new ImageSize(width, height);
        com.nostra13.universalimageloader.core.ImageLoader.getInstance().displayImage(Uri.parse("file://" + path).toString(), imageView, size);
    }

    @Override
    public void clearMemoryCache() {
    }
}

3、在自定义Application中初始化(别忘了在AndroidManifest.xml中使用该自定义Application):

/**
 * @创建者 CSDN_LQR
 * @描述 自定义Application类
 */
public class App extends Application {

    @Override
    public void onCreate() {
        super.onCreate();
        initUniversalImageLoader();
        initImagePicker();
    }

    private void initUniversalImageLoader() {
        //初始化ImageLoader
        ImageLoader.getInstance().init(
                ImageLoaderConfiguration.createDefault(getApplicationContext()));
    }

    /**
     * 初始化仿微信控件ImagePicker
     */
    private void initImagePicker() {
        ImagePicker imagePicker = ImagePicker.getInstance();
        imagePicker.setImageLoader(new UILImageLoader());   //设置图片加载器
        imagePicker.setShowCamera(true);  //显示拍照按钮
        imagePicker.setCrop(true);        //允许裁剪(单选才有效)
        imagePicker.setSaveRectangle(true); //是否按矩形区域保存
        imagePicker.setSelectLimit(9);    //选中数量限制
        imagePicker.setStyle(CropImageView.Style.RECTANGLE);  //裁剪框的形状
        imagePicker.setFocusWidth(800);   //裁剪框的宽度。单位像素(圆形自动取宽高最小值)
        imagePicker.setFocusHeight(800);  //裁剪框的高度。单位像素(圆形自动取宽高最小值)
        imagePicker.setOutPutX(1000);//保存文件的宽度。单位像素
        imagePicker.setOutPutY(1000);//保存文件的高度。单位像素
    }
}

4、打开图片选择界面代码:

public static final int IMAGE_PICKER = 100;

Intent intent = new Intent(this, ImageGridActivity.class);
startActivityForResult(intent, IMAGE_PICKER);

5、获取所选图片信息:

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (resultCode == ImagePicker.RESULT_CODE_ITEMS) {//返回多张照片
        if (data != null) {
            //是否发送原图
            boolean isOrig = data.getBooleanExtra(ImagePreviewActivity.ISORIGIN, false);
            ArrayList<ImageItem> images = (ArrayList<ImageItem>) data.getSerializableExtra(ImagePicker.EXTRA_RESULT_ITEMS);

            Log.e("CSDN_LQR", isOrig ? "发原图" : "不发原图");//若不发原图的话,需要在自己在项目中做好压缩图片算法
            for (ImageItem imageItem : images) {
                Log.e("CSDN_LQR", imageItem.path);
            }
        }
    }
}

三、效果:

image image image image

More Repositories

1

LQRWeChat

本项目仿最新版微信6.5.7(除图片选择器外),基于融云SDK,使用目前较火的 Rxjava+Retrofit+MVP+Glide 技术开发。相比上个版本,加入发送位置消息,红包消息等功能。
Java
3,370
star
2

LQREmojiLibrary

一个超级牛逼的表情库,可使用表情及贴图功能,方便好用,抽离图片加载接口,图片加载工具可让开发者自己选择。
Java
484
star
3

LQRAudioRecord

集成录音与播音功能,使用简单方便
Java
382
star
4

MaterialDesignDemo

Material Design 兼容性控件学习
Java
226
star
5

HotFixDemo

热修复Demo(附文章讲解)
Java
162
star
6

TopsalesSellControlTableDemo

仿房产销冠APP的销控表界面
Java
147
star
7

LQRNineGridImageView

仿微信群头像九宫格控件
Java
132
star
8

LQRRecyclerViewLibrary

对RecyclerView的封装,让其使用更加简单,得心应手
Java
128
star
9

LQRBiliBlili

高仿bilibili安卓客户端
Java
116
star
10

LQRLibyuv

基于 libyuv 封装各种图像格式转换,用于处理摄像头yuv图像数据
C++
113
star
11

LQRDropdownLayoutLibrary

下拉导航菜单,使用非常简单
Java
71
star
12

LQRAdapterLibrary

万能适配器(RecyclerView、ListView、GridView)
Java
57
star
13

LQRViedoRecordView

安卓视频录制控件,可以用来仿微信小视频
Java
57
star
14

LQRNativePicSelect

为使用系统原生选择图片需求做了一个工具类封装,并适配了Android 7.0
Java
44
star
15

RePluginX

🔥 Supports AndroidX and Android-Support
Java
43
star
16

LQROptionItemView

项目中常用选项条目布局控件
Java
21
star
17

AndroidAopDemo

Android面向切面编程Demo(AOP)
Java
20
star
18

AspectLogDemo

Spring Boot使用自定义注解+AOP处理日志
Java
16
star
19

LQRArticlePatch

解析下载今日头条视频及图片
Java
14
star
20

SimpleDbFrame

手撸一个简单的面向对象数据框架(工厂模式+泛型+注解+反射)
Java
13
star
21

LQRRecordProgress

仿微信小视频进度条
Java
8
star
22

DropdownLayoutDemo

下拉导航菜单,使用非常简单
Java
6
star
23

LiteARouter

精简版ARouter,与 RePluginX 更配哦~
Java
5
star
24

OpenGLDemo

Android中OpenGL编程Demo
Java
3
star
25

meiduo_project

django美多商城
HTML
3
star
26

UniappIseXfyun

Uniapp小程序版 科大讯飞语音评测Demo
TypeScript
3
star
27

LQROpenCV

基于OpenCV3.4.1,实现人脸识别,手部识别。
C++
3
star
28

IocDemo

使用注解打造自己的IOC框架
Java
2
star
29

vue-legacy-project

兼容低版本浏览器的vue工程示例
Vue
2
star
30

LQRCustomerView

自定义View练习
Java
2
star
31

OpenGLStudy

study opengl and camera
Java
1
star
32

pagehelper

Mybatis逆向工程分页助手fix
Java
1
star
33

www---api-6-17-

Python
1
star
34

LQRCameraDemo

Android相机使用Demo
Java
1
star
35

WeiXinEmotion

模仿微信表情
Java
1
star
36

game-tank

Kotlin坦克大战
Kotlin
1
star
37

LQRLibrtmp

基于librtmp搭建的RTMP推流器
C
1
star
38

uniapp-tensorflowjs-mp

uniapp 集成 tensorflowjs(微信小程序)
SCSS
1
star
39

vite-plugin-variant

vite-plugin-variant is a vite plugin for managing multi-channel differentiated source code
TypeScript
1
star