فهرست منبع

1.添加Luban图片压缩库

王鹏鹏 2 سال پیش
والد
کامیت
1e859008e2

+ 14 - 0
app/src/main/AndroidManifest.xml

@@ -79,6 +79,20 @@
                 android:name="android.accessibilityservice"
                 android:resource="@xml/auto_install_services_config" />
         </service>
+
+        <activity
+            android:name="com.donkingliang.imageselector.ImageSelectorActivity"
+            android:configChanges="orientation|keyboardHidden|screenSize"
+            android:launchMode="singleTop"
+            android:theme="@style/Theme.AppCompat.Light.NoActionBar" />
+        <activity
+            android:name="com.donkingliang.imageselector.PreviewActivity"
+            android:configChanges="orientation|keyboardHidden|screenSize"
+            android:theme="@style/Theme.AppCompat.Light.NoActionBar" />
+        <activity
+            android:name="com.donkingliang.imageselector.ClipImageActivity"
+            android:configChanges="orientation|keyboardHidden|screenSize"
+            android:theme="@style/Theme.AppCompat.Light.NoActionBar" />
     </application>
 
 </manifest>

+ 79 - 2
healthconsultation/src/main/java/com/yingyang/healthconsultation/consultationsheet/ConsultationSheetActivity.kt

@@ -1,19 +1,29 @@
 package com.yingyang.healthconsultation.consultationsheet
 
 import android.annotation.SuppressLint
+import android.app.Activity
+import android.content.Intent
+import android.os.Environment
+import android.text.TextUtils
 import android.view.MotionEvent
 import android.view.View
 import androidx.recyclerview.widget.LinearLayoutManager
 import androidx.recyclerview.widget.RecyclerView
 import com.alibaba.android.arouter.facade.annotation.Route
+import com.donkingliang.imageselector.utils.ImageSelector
 import com.yingyang.healthconsultation.R
 import com.yingyang.healthconsultation.adapter.SickTimeAdapter
 import com.yingyang.healthconsultation.databinding.ActivityConsultationSheetBinding
+import com.yingyang.healthconsultation.utils.CommonUtils
 import com.yingyangfly.baselib.ext.getEndAnimation
 import com.yingyangfly.baselib.ext.getScaleAnimation
 import com.yingyangfly.baselib.ext.toast
 import com.yingyangfly.baselib.mvvm.BaseMVVMActivity
 import com.yingyangfly.baselib.router.RouterUrlCommon
+import com.yingyangfly.baselib.utils.LogUtil
+import top.zibin.luban.Luban
+import top.zibin.luban.OnCompressListener
+import java.io.File
 
 /**
  * 问诊单
@@ -23,6 +33,8 @@ class ConsultationSheetActivity :
     BaseMVVMActivity<ActivityConsultationSheetBinding, ConsultationSheetViewModel>(),
     View.OnTouchListener {
 
+    private val REQUEST_MEDICALRECORDS_CAMERA = 1
+    private val REQUEST_MEDICALRECORDS_IMG = 2
     private val sickTimes = mutableListOf<String>()
     private val sickTimeAdapter by lazy { SickTimeAdapter() }
 
@@ -44,6 +56,7 @@ class ConsultationSheetActivity :
     override fun initListener() {
         binding {
             backLayout.setOnTouchListener(this@ConsultationSheetActivity)
+            btnSubmit.setOnTouchListener(this@ConsultationSheetActivity)
         }
     }
 
@@ -55,7 +68,7 @@ class ConsultationSheetActivity :
     override fun onTouch(v: View, event: MotionEvent): Boolean {
         when (event.action) {
             MotionEvent.ACTION_DOWN -> {
-                if (v.id == R.id.backLayout) {
+                if (v.id == R.id.backLayout || v.id == R.id.btnSubmit) {
                     v.startAnimation(getScaleAnimation())
                 }
             }
@@ -65,10 +78,20 @@ class ConsultationSheetActivity :
                     R.id.backLayout -> {
                         finish()
                     }
+                    R.id.btnSubmit -> {
+                        ImageSelector.builder()
+                            .useCamera(true) // 设置是否使用拍照
+                            .setSingle(false) //设置是否单选
+                            .canPreview(true) //是否点击放大图片查看,,默认为true
+                            .setMaxSelectCount(
+                                9
+                            ) // 图片的最大选择数量,小于等于0时,不限数量。
+                            .start(this, REQUEST_MEDICALRECORDS_CAMERA) // 打开相册
+                    }
                 }
             }
             MotionEvent.ACTION_CANCEL -> {
-                if (v.id == R.id.backLayout) {
+                if (v.id == R.id.backLayout || v.id == R.id.btnSubmit) {
                     v.startAnimation(getEndAnimation())
                 }
             }
@@ -88,4 +111,58 @@ class ConsultationSheetActivity :
             }
         })
     }
+
+    override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
+        super.onActivityResult(requestCode, resultCode, data)
+        if (resultCode == Activity.RESULT_OK) {
+            val images = data?.getStringArrayListExtra(ImageSelector.SELECT_RESULT)
+            images?.let {
+                withLs(it, "medicalrecords")
+            }
+        }
+    }
+
+    /**
+     * 开启luban图片压缩
+     */
+    private fun withLs(photos: List<String>, selectType: String) {
+        Luban.with(this)
+            .load(photos)
+            .ignoreBy(100)
+            .setTargetDir(getPath())
+            .setFocusAlpha(false)
+            .filter { path -> !(TextUtils.isEmpty(path) || path.toLowerCase().endsWith(".gif")) }
+            .setCompressListener(
+                object : OnCompressListener {
+                    override fun onStart() {
+
+                    }
+
+                    override fun onSuccess(file: File) {
+                        val data = mutableListOf<String>()
+                        data.add(file.path)
+
+                    }
+
+                    override fun onError(e: Throwable) {
+                        LogUtil.e("图片压缩失败:$e")
+                    }
+                }).launch()
+    }
+
+    private fun getPath(): String {
+        val path = Environment.getExternalStorageDirectory().path + "/xioaliu/image/"
+        val file = File(path)
+        return if (file.mkdirs()) {
+            path
+        } else path
+    }
+
+    override fun onDestroy() {
+        val path = getPath()
+        if (path.isNullOrEmpty().not()) {
+            CommonUtils.deleteDirectory(path)
+        }
+        super.onDestroy()
+    }
 }

+ 87 - 0
healthconsultation/src/main/java/com/yingyang/healthconsultation/utils/CommonUtils.kt

@@ -0,0 +1,87 @@
+package com.yingyang.healthconsultation.utils
+
+import java.io.File
+
+/**
+ * 防止双击
+ */
+object CommonUtils {
+
+    // 两次点击按钮之间的点击间隔不能少于1000毫秒
+    private const val SHORT_MIN_CLICK_DELAY_TIME = 1000
+    private const val MIN_CLICK_DELAY_TIME = 1500
+    private var lastClickTime: Long = 0
+
+    val isFastClick: Boolean
+        get() {
+            var flag = false
+            val curClickTime = System.currentTimeMillis()
+            if (curClickTime - lastClickTime >= MIN_CLICK_DELAY_TIME) {
+                flag = true
+            }
+            lastClickTime = curClickTime
+            return flag
+        }
+    val isShortFastClick: Boolean
+        get() {
+            var flag = false
+            val curClickTime = System.currentTimeMillis()
+            if (curClickTime - lastClickTime >= SHORT_MIN_CLICK_DELAY_TIME) {
+                flag = true
+            }
+            lastClickTime = curClickTime
+            return flag
+        }
+
+    @JvmStatic
+    fun getCompanyUnit(company: String, num: String): String {
+        return if ("g" == company || "克" == company) "" else "共(" + num + "g)"
+    }
+
+    /**
+     * 删除目录及目录下的文件
+     */
+    fun deleteDirectory(dir: String): Boolean {
+        // 如果dir不以文件分隔符结尾,自动添加文件分隔符
+        var dir = dir
+        if (!dir.endsWith(File.separator)) dir += File.separator
+        val dirFile = File(dir)
+        // 如果dir对应的文件不存在,或者不是一个目录,则退出
+        if (!dirFile.exists() || !dirFile.isDirectory) {
+            return false
+        }
+        var flag = true
+        // 删除文件夹中的所有文件包括子目录
+        val files: Array<File> = dirFile.listFiles()
+        for (i in files.indices) {
+            // 删除子文件
+            if (files[i].isFile) {
+                flag = deleteFile(files[i].absolutePath)
+                if (!flag) break
+            } else if (files[i].isDirectory) {
+                flag = deleteDirectory(
+                    files[i].absolutePath
+                )
+                if (!flag) break
+            }
+        }
+        if (!flag) {
+            return false
+        }
+        // 删除当前目录
+        return dirFile.delete()
+    }
+
+    /**
+     * 删除单个文件
+     */
+    private fun deleteFile(fileName: String): Boolean {
+        val file = File(fileName)
+        // 如果文件路径所对应的文件存在,并且是一个文件,则直接删除
+        return if (file.exists() && file.isFile) {
+            file.delete()
+        } else {
+            false
+        }
+    }
+}