luanxuye 5 years ago
parent
commit
e6c56657f7

+ 3 - 0
base_library/build.gradle

@@ -117,6 +117,9 @@ dependencies {
     api lib.buglyNative
     api lib.superTextView
 
+    api 'com.github.LuckSiege.PictureSelector:picture_library:v2.5.8'
+    api 'com.aliyun.dpa:oss-android-sdk:+'
+
     testImplementation lib.junit
     androidTestImplementation lib.runner
     androidTestImplementation lib.espresso

+ 3 - 0
base_library/src/main/AndroidManifest.xml

@@ -46,6 +46,9 @@
         android:requestLegacyExternalStorage="true"
         android:theme="@style/AppTheme.NoActionBar">
 
+        <activity android:name=".activityUtils.CameraDialogActivity"
+            android:theme="@style/MyDialogStyle"/>
+
 
         <!--   适配7.0及以上获取uri     -->
         <provider

+ 154 - 0
base_library/src/main/java/com/mgtech/base_library/activityUtils/CameraDialogActivity.java

@@ -0,0 +1,154 @@
+package com.mgtech.base_library.activityUtils;
+
+import android.Manifest;
+import android.content.Intent;
+import android.os.Parcelable;
+import android.view.View;
+import android.widget.LinearLayout;
+
+import androidx.annotation.NonNull;
+
+import com.alibaba.android.arouter.facade.annotation.Route;
+import com.luck.picture.lib.PictureSelector;
+import com.luck.picture.lib.config.PictureConfig;
+import com.luck.picture.lib.config.PictureMimeType;
+import com.luck.picture.lib.entity.LocalMedia;
+import com.mgtech.base_library.R;
+import com.mgtech.base_library.R2;
+import com.mgtech.base_library.base.BaseActivity;
+import com.mgtech.base_library.util.GlideEngine;
+import com.mgtech.base_library.util.GlideUtil;
+
+import java.io.Serializable;
+import java.util.LinkedList;
+import java.util.List;
+
+import butterknife.OnClick;
+import pub.devrel.easypermissions.AfterPermissionGranted;
+import pub.devrel.easypermissions.EasyPermissions;
+
+import static com.mgtech.base_library.consts.Const.PIC_KEY;
+import static com.mgtech.base_library.router.RouterURLS.BASE_CAMERA_DIALOG_URL;
+
+/**
+ * @ProjectName: ShellApplication
+ * @Package: com.tennor.base_library.activityUtils
+ * @ClassName: CameraDialogActivity
+ * @Description: java类作用描述
+ * @Author: Administrator
+ * @CreateDate: 2020/4/2 15:10
+ * @UpdateUser: 更新者:
+ * @UpdateDate: 2020/4/2 15:10
+ * @UpdateRemark: 更新说明:
+ * @Version: 1.0
+ */
+@Route(path = BASE_CAMERA_DIALOG_URL)
+public class CameraDialogActivity extends BaseActivity {
+    private boolean isCamera;
+
+    @Override
+    protected int initLayoutId() {
+        return R.layout.popup_camera_photo;
+    }
+
+    @Override
+    protected void initView() {
+
+    }
+
+    @Override
+    protected void initData() {
+        getWindow().setLayout(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT);
+    }
+
+    @OnClick({R2.id.account_take_photo, R2.id.account_photo_album, R2.id.account_photo_cancel})
+    public void OnClick(View view) {
+        int id = view.getId();
+        if (id == R.id.account_take_photo) {
+            isCamera = true;
+            methodRequiresCameraPermission();
+        } else if (id == R.id.account_photo_album) {
+            isCamera = false;
+            methodRequiresCameraPermission();
+        } else if (id == R.id.account_photo_cancel) {
+            setResult(RESULT_CANCELED);
+            finish();
+        }
+    }
+
+
+    @Override
+    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
+        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
+        EasyPermissions.onRequestPermissionsResult(requestCode, permissions, grantResults, this);
+    }
+
+    @AfterPermissionGranted(10)
+    private void methodRequiresCameraPermission() {
+        String[] perms = {Manifest.permission.CAMERA, Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.READ_EXTERNAL_STORAGE};
+        if (EasyPermissions.hasPermissions(this, perms)) {
+            if (isCamera) { //调用相机
+//拍照
+                PictureSelector.create(this)
+                        .openCamera(PictureMimeType.ofImage())
+                        .isEnableCrop(true) //是否裁剪
+                        .withAspectRatio(1, 1)//裁剪比例1:1
+                        .isCompress(true)//是否压缩
+                        .forResult(PictureConfig.CHOOSE_REQUEST);
+            } else { //打开相册
+                //相册
+                PictureSelector.create(this)
+                        .openGallery(PictureMimeType.ofImage())
+                        .maxSelectNum(5) //最大个数
+                        .minSelectNum(1)//最小个数
+                        .imageSpanCount(4)//每行显示的个数
+                        .isEnableCrop(true) //是否裁剪
+                        .withAspectRatio(1, 1)//裁剪比例1:1
+                        .isCompress(true)//是否压缩
+                        .isCamera(false) //是否显示拍照按钮
+                        .isPreviewImage(true)
+                        .imageEngine(GlideEngine.createGlideEngine()) //核心代码必须要有
+                        .selectionMode(PictureConfig.MULTIPLE)
+                        .forResult(PictureConfig.CHOOSE_REQUEST);
+            }
+        } else {
+            // Do not have permissions, request them now
+            EasyPermissions.requestPermissions(this, getString(R.string.camera_permission),
+                    10, perms);
+        }
+    }
+
+
+    @Override
+    public void onActivityResult(int requestCode, int resultCode, Intent data) {
+        super.onActivityResult(requestCode, resultCode, data);
+
+        List<LocalMedia> images;
+        if (resultCode == RESULT_OK) {
+            if (requestCode == PictureConfig.CHOOSE_REQUEST) {
+                List<String> imgs = new LinkedList<>() ;
+                images = PictureSelector.obtainMultipleResult(data);
+                //selectList = PictureSelector.obtainMultipleResult(data);
+                // 例如 LocalMedia 里面返回三种path
+                // 1.media.getPath(); 为原图path
+                // 2.media.getCutPath();为裁剪后path,需判断media.isCut();是否为true
+                // 3.media.getCompressPath();为压缩后path,需判断media.isCompressed();是否为true
+                // 如果裁剪并压缩了,以取压缩路径为准,因为是先裁剪后压缩的
+                for (int i = 0;i<images.size();i++){
+                    if (images.get(i).isCut() && images.get(i).isCompressed()){// 裁剪并压缩了
+                        imgs.add(images.get(i).getCompressPath());
+                    }else if (images.get(i).isCompressed()){//只进行了压缩
+                        imgs.add(images.get(i).getCompressPath());
+                    }else if (images.get(i).isCut()){//只进行裁剪
+                        imgs.add(images.get(i).getCutPath());
+                    }else {//原图
+                        imgs.add(images.get(i).getPath());
+                    }
+                }
+
+                setResult(RESULT_OK, new Intent().putExtra(PIC_KEY, (Serializable) imgs));
+            }
+        }
+        finish();
+    }
+}

File diff suppressed because it is too large
+ 89 - 0
base_library/src/main/java/com/mgtech/base_library/bean/OSSBean.java


+ 1 - 0
base_library/src/main/java/com/mgtech/base_library/consts/Const.java

@@ -17,4 +17,5 @@ public class Const {
     public static final String GOOGLE_WEB_KEY = "AIzaSyCROBoTQe0uNjXhNPosXpvQ6nxhInYSWGs";
 
     public static final String AES_KEY = "Rkb4jvUy/ye7Cd7K";
+    public static final String PIC_KEY = "imgs";
 }

+ 7 - 2
base_library/src/main/java/com/mgtech/base_library/http/CustomProgressDialog.java

@@ -1,5 +1,6 @@
 package com.mgtech.base_library.http;
 
+import android.annotation.SuppressLint;
 import android.app.Dialog;
 import android.content.Context;
 import android.graphics.drawable.AnimationDrawable;
@@ -9,7 +10,9 @@ import android.view.View;
 import android.widget.ImageView;
 import android.widget.TextView;
 
+import com.bumptech.glide.Glide;
 import com.mgtech.base_library.R;
+import com.mgtech.base_library.util.GlideUtil;
 
 /**
  * @ProjectName: TUA
@@ -55,8 +58,10 @@ public class CustomProgressDialog extends Dialog {
         }
         //添加控件  执行帧动画
         ImageView imageView = (ImageView) mDialogView.findViewById(R.id.loadingImageView);
-        animationDrawable = (AnimationDrawable) imageView.getBackground();
-        animationDrawable.start();
+//        animationDrawable = (AnimationDrawable) imageView.getBackground();
+//        animationDrawable.start();
+        Glide.with(getContext()).load(R.drawable.loadings)
+                .into(imageView);
     }
 
     @Override

+ 2 - 0
base_library/src/main/java/com/mgtech/base_library/router/RouterURLS.java

@@ -15,4 +15,6 @@ package com.mgtech.base_library.router;
 public class RouterURLS {
 
     public static final String ROUTER_SERVICE_BEAN = "/base_library/router/RouterServiceBean";
+
+    public static final String BASE_CAMERA_DIALOG_URL = "/activityUtils/CameraDialogActivity";
 }

+ 233 - 0
base_library/src/main/java/com/mgtech/base_library/util/GlideEngine.java

@@ -0,0 +1,233 @@
+package com.mgtech.base_library.util;
+
+import android.content.Context;
+import android.graphics.Bitmap;
+import android.graphics.PointF;
+import android.graphics.drawable.Drawable;
+import android.view.View;
+import android.widget.ImageView;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.core.graphics.drawable.RoundedBitmapDrawable;
+import androidx.core.graphics.drawable.RoundedBitmapDrawableFactory;
+
+import com.bumptech.glide.Glide;
+import com.bumptech.glide.request.RequestOptions;
+import com.bumptech.glide.request.target.BitmapImageViewTarget;
+import com.bumptech.glide.request.target.ImageViewTarget;
+import com.luck.picture.lib.engine.ImageEngine;
+import com.luck.picture.lib.listener.OnImageCompleteCallback;
+import com.luck.picture.lib.tools.MediaUtils;
+import com.luck.picture.lib.widget.longimage.ImageSource;
+import com.luck.picture.lib.widget.longimage.ImageViewState;
+import com.luck.picture.lib.widget.longimage.SubsamplingScaleImageView;
+import com.mgtech.base_library.R;
+
+/**
+ * @author:luck
+ * @date:2019-11-13 17:02
+ * @describe:Glide加载引擎
+ */
+public class GlideEngine implements ImageEngine {
+
+    /**
+     * 加载图片
+     *
+     * @param context
+     * @param url
+     * @param imageView
+     */
+    @Override
+    public void loadImage(@NonNull Context context, @NonNull String url, @NonNull ImageView imageView) {
+        Glide.with(context)
+                .load(url)
+                .into(imageView);
+    }
+
+    /**
+     * 加载网络图片适配长图方案
+     * # 注意:此方法只有加载网络图片才会回调
+     *
+     * @param context
+     * @param url
+     * @param imageView
+     * @param longImageView
+     * @param callback      网络图片加载回调监听 {link after version 2.5.1 Please use the #OnImageCompleteCallback#}
+     */
+    @Override
+    public void loadImage(@NonNull Context context, @NonNull String url,
+                          @NonNull ImageView imageView,
+                          SubsamplingScaleImageView longImageView, OnImageCompleteCallback callback) {
+        Glide.with(context)
+                .asBitmap()
+                .load(url)
+                .into(new ImageViewTarget<Bitmap>(imageView) {
+                    @Override
+                    public void onLoadStarted(@Nullable Drawable placeholder) {
+                        super.onLoadStarted(placeholder);
+                        if (callback != null) {
+                            callback.onShowLoading();
+                        }
+                    }
+
+                    @Override
+                    public void onLoadFailed(@Nullable Drawable errorDrawable) {
+                        super.onLoadFailed(errorDrawable);
+                        if (callback != null) {
+                            callback.onHideLoading();
+                        }
+                    }
+
+                    @Override
+                    protected void setResource(@Nullable Bitmap resource) {
+                        if (callback != null) {
+                            callback.onHideLoading();
+                        }
+                        if (resource != null) {
+                            boolean eqLongImage = MediaUtils.isLongImg(resource.getWidth(),
+                                    resource.getHeight());
+                            longImageView.setVisibility(eqLongImage ? View.VISIBLE : View.GONE);
+                            imageView.setVisibility(eqLongImage ? View.GONE : View.VISIBLE);
+                            if (eqLongImage) {
+                                // 加载长图
+                                longImageView.setQuickScaleEnabled(true);
+                                longImageView.setZoomEnabled(true);
+                                longImageView.setPanEnabled(true);
+                                longImageView.setDoubleTapZoomDuration(100);
+                                longImageView.setMinimumScaleType(SubsamplingScaleImageView.SCALE_TYPE_CENTER_CROP);
+                                longImageView.setDoubleTapZoomDpi(SubsamplingScaleImageView.ZOOM_FOCUS_CENTER);
+                                longImageView.setImage(ImageSource.bitmap(resource),
+                                        new ImageViewState(0, new PointF(0, 0), 0));
+                            } else {
+                                // 普通图片
+                                imageView.setImageBitmap(resource);
+                            }
+                        }
+                    }
+                });
+    }
+
+    /**
+     * 加载网络图片适配长图方案
+     * # 注意:此方法只有加载网络图片才会回调
+     *
+     * @param context
+     * @param url
+     * @param imageView
+     * @param longImageView
+     * @ 已废弃
+     */
+    @Override
+    public void loadImage(@NonNull Context context, @NonNull String url,
+                          @NonNull ImageView imageView,
+                          SubsamplingScaleImageView longImageView) {
+        Glide.with(context)
+                .asBitmap()
+                .load(url)
+                .into(new ImageViewTarget<Bitmap>(imageView) {
+                    @Override
+                    protected void setResource(@Nullable Bitmap resource) {
+                        if (resource != null) {
+                            boolean eqLongImage = MediaUtils.isLongImg(resource.getWidth(),
+                                    resource.getHeight());
+                            longImageView.setVisibility(eqLongImage ? View.VISIBLE : View.GONE);
+                            imageView.setVisibility(eqLongImage ? View.GONE : View.VISIBLE);
+                            if (eqLongImage) {
+                                // 加载长图
+                                longImageView.setQuickScaleEnabled(true);
+                                longImageView.setZoomEnabled(true);
+                                longImageView.setPanEnabled(true);
+                                longImageView.setDoubleTapZoomDuration(100);
+                                longImageView.setMinimumScaleType(SubsamplingScaleImageView.SCALE_TYPE_CENTER_CROP);
+                                longImageView.setDoubleTapZoomDpi(SubsamplingScaleImageView.ZOOM_FOCUS_CENTER);
+                                longImageView.setImage(ImageSource.bitmap(resource),
+                                        new ImageViewState(0, new PointF(0, 0), 0));
+                            } else {
+                                // 普通图片
+                                imageView.setImageBitmap(resource);
+                            }
+                        }
+                    }
+                });
+    }
+
+    /**
+     * 加载相册目录
+     *
+     * @param context   上下文
+     * @param url       图片路径
+     * @param imageView 承载图片ImageView
+     */
+    @Override
+    public void loadFolderImage(@NonNull Context context, @NonNull String url, @NonNull ImageView imageView) {
+        Glide.with(context)
+                .asBitmap()
+                .load(url)
+                .override(180, 180)
+                .centerCrop()
+                .sizeMultiplier(0.5f)
+                .apply(new RequestOptions().placeholder(R.drawable.picture_image_placeholder))
+                .into(new BitmapImageViewTarget(imageView) {
+                    @Override
+                    protected void setResource(Bitmap resource) {
+                        RoundedBitmapDrawable circularBitmapDrawable =
+                                RoundedBitmapDrawableFactory.
+                                        create(context.getResources(), resource);
+                        circularBitmapDrawable.setCornerRadius(8);
+                        imageView.setImageDrawable(circularBitmapDrawable);
+                    }
+                });
+    }
+
+
+    /**
+     * 加载gif
+     *
+     * @param context   上下文
+     * @param url       图片路径
+     * @param imageView 承载图片ImageView
+     */
+    @Override
+    public void loadAsGifImage(@NonNull Context context, @NonNull String url,
+                               @NonNull ImageView imageView) {
+        Glide.with(context)
+                .asGif()
+                .load(url)
+                .into(imageView);
+    }
+
+    /**
+     * 加载图片列表图片
+     *
+     * @param context   上下文
+     * @param url       图片路径
+     * @param imageView 承载图片ImageView
+     */
+    @Override
+    public void loadGridImage(@NonNull Context context, @NonNull String url, @NonNull ImageView imageView) {
+        Glide.with(context)
+                .load(url)
+                .override(200, 200)
+                .centerCrop()
+                .apply(new RequestOptions().placeholder(R.drawable.picture_image_placeholder))
+                .into(imageView);
+    }
+
+
+    private GlideEngine() {
+    }
+
+    private static GlideEngine instance;
+
+    public static GlideEngine createGlideEngine() {
+        if (null == instance) {
+            synchronized (GlideEngine.class) {
+                if (null == instance) {
+                    instance = new GlideEngine();
+                }
+            }
+        }
+        return instance;
+    }
+}

BIN
base_library/src/main/res/drawable-xhdpi/loadings.gif


+ 8 - 3
base_library/src/main/res/layout/dialog_progress.xml

@@ -6,10 +6,15 @@
     android:orientation="vertical">
     <ImageView
         android:id="@+id/loadingImageView"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:background="@drawable/progress_round"
+        android:layout_width="@dimen/dp_150"
+        android:layout_height="@dimen/dp_150"
         android:layout_gravity="center"/>
+<!--    <ImageView-->
+<!--        android:id="@+id/loadingImageView"-->
+<!--        android:layout_width="wrap_content"-->
+<!--        android:layout_height="wrap_content"-->
+<!--        android:background="@drawable/progress_round"-->
+<!--        android:layout_gravity="center"/>-->
     <TextView
         android:id="@+id/tv_loadingmsg"
         android:layout_width="wrap_content"

+ 47 - 0
base_library/src/main/res/layout/popup_camera_photo.xml

@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:background="@color/transparent"
+    android:orientation="vertical">
+
+    <View
+        android:id="@+id/account_photo_close"
+        android:layout_width="match_parent"
+        android:layout_height="0dp"
+        android:background="@color/black_alpha_60"
+        android:layout_weight="1"/>
+
+    <TextView
+        android:id="@+id/account_take_photo"
+        android:textColor="@color/black_text"
+        android:textSize="@dimen/sp_14"
+        android:layout_width="match_parent"
+        android:layout_height="@dimen/dp_50"
+        android:background="@color/white"
+        android:gravity="center"
+        android:text="@string/common_take_photo" />
+
+
+    <TextView
+        android:id="@+id/account_photo_album"
+        android:textColor="@color/black_text"
+        android:textSize="@dimen/sp_14"
+        android:layout_width="match_parent"
+        android:layout_height="@dimen/dp_50"
+        android:layout_marginTop="@dimen/dp_1"
+        android:background="@color/white"
+        android:gravity="center"
+        android:text="@string/common_photo_album" />
+
+    <TextView
+        android:id="@+id/account_photo_cancel"
+        android:textColor="@color/black_text"
+        android:textSize="@dimen/sp_14"
+        android:layout_width="match_parent"
+        android:layout_height="@dimen/dp_50"
+        android:layout_marginTop="@dimen/dp_5"
+        android:background="@color/white"
+        android:gravity="center"
+        android:text="@string/common_cancel" />
+</LinearLayout>

+ 1 - 1
config.gradle

@@ -15,7 +15,7 @@ ext {
             constraint        : "2.0.0-alpha1",
             gson              : "2.8.2",
             butterKnife       : "10.2.0",
-            glide             : "4.7.1",
+            glide             : "4.11.0",
             banner            : "1.4.10",
             StatusBarCompat   : "2.2.0",
             baseRecyclerHelper: "2.9.50",