lmw
2024-07-16 c303346ae803dc2a89ec0f025192773211861915
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
package com.dollearn.student.utils.extention
 
import android.content.Context
import android.graphics.Bitmap
import android.util.Log
import android.view.View
import android.widget.ImageView
import androidx.constraintlayout.widget.ConstraintLayout
import cn.sinata.xldutils.activity.BaseActivity
import com.bumptech.glide.Glide
import com.bumptech.glide.request.target.SimpleTarget
import com.bumptech.glide.request.transition.Transition
import com.dollearn.student.utils.OSSUtil
import com.dollearn.student.utils.extention.ViewClickDelay.SPACE_TIME
import com.dollearn.student.utils.extention.ViewClickDelay.hash
import com.dollearn.student.utils.extention.ViewClickDelay.lastClickTime
import com.dollearn.student.utils.glide.GlideUtil
import com.dollearn.student.utils.interfaces.StringCallback
import org.jetbrains.anko.toast
import top.zibin.luban.Luban
import top.zibin.luban.OnCompressListener
import java.io.File
 
 
fun String.uploadWithCompress(act: BaseActivity, callback: StringCallback){
    Luban.with(act).load(File(this))
        .ignoreBy(100).setTargetDir(act.getPath())
        .filter { path -> path.isNotEmpty() || path.toLowerCase().endsWith(".gif") }
        .setCompressListener(object : OnCompressListener {
            override fun onSuccess(file: File) {
                Log.e("gwx", "压缩完成")
                Thread(Runnable {
                    OSSUtil(act).uploadSingle(file.path, object : OSSUtil.OSSUploadCallBack() {
                        override fun onFial(message: String?) {
                            super.onFial(message)
                            act.runOnUiThread {
                                act.dismissDialog()
                                act.toast(message ?: "上传失败")
                            }
                        }
 
                        override fun onFinish(url: String) {
                            super.onFinish(url)
                            act.runOnUiThread {
                                act.dismissDialog()
                                callback.onResult(url)
                                file.delete()
                            }
                        }
                    })
                }).start()
            }
 
            override fun onError(e: Throwable?) {
                e?.printStackTrace()
                act.dismissDialog()
            }
 
            override fun onStart() {
                Log.e("gwx", "压缩开始")
                act.showDialog(canCancel = false)
            }
        }).launch()
}
 
object ViewClickDelay {
    var hash: Int = 0
    var lastClickTime: Long = 0
    var SPACE_TIME: Long = 1000
}
 
infix fun View.clickDelay(clickAction: () -> Unit) {
    this.setOnClickListener {
        if (this.hashCode() != hash) {
            hash = this.hashCode()
            lastClickTime = System.currentTimeMillis()
            clickAction()
        } else {
            val currentTime = System.currentTimeMillis()
            if (currentTime - lastClickTime > SPACE_TIME) {
                lastClickTime = System.currentTimeMillis()
                clickAction()
            }
        }
    }
}
 
/**
 * 使用Glide计算网络图片的宽高比加载长图
 * 父布局必须是ConstraintLayout:使用 dimensionRatio 属性
 */
fun String.loadLongImage(context: Context, imageView: ImageView){
    Glide.with(context).asBitmap().load(this)
        .into(object : SimpleTarget<Bitmap?>() {
            override fun onResourceReady(
                resource: Bitmap,
                transition: Transition<in Bitmap?>?
            ) {
                val layoutParams = imageView.layoutParams as ConstraintLayout.LayoutParams
                layoutParams.dimensionRatio =
                    "${resource.width}:${resource.height}"
                imageView.layoutParams = layoutParams
                GlideUtil.load(context, this@loadLongImage, imageView, 0)
            }
        })
}
 
fun Int.formatToChinese():String{
    var number = this
    val DIGITS = arrayListOf('零', '一', '二', '三', '四', '五', '六', '七', '八', '九')
    val UNITS = arrayListOf('0', '十', '百', '千', '万')
    if (number == 0) {
        return DIGITS[0].toString()
    }
    val chineseNumber = StringBuilder()
    var unitPlace = 0 // 位数,从百位开始
    var lastWasZero = false // 前一个数字是否为零
    while (number > 0) {
        val digit: Int = number % 10
        lastWasZero = if (digit == 0) {
            if (!lastWasZero) {
                chineseNumber.insert(0, DIGITS[0])
            }
            true
        } else {
            chineseNumber.insert(0, DIGITS[digit])
            chineseNumber.insert(0, UNITS[unitPlace])
            false
        }
        number /= 10
        unitPlace++
    }
    return chineseNumber.toString().replace("0","")
}