fix
lmw
2024-11-09 d1a9e3312387b6c47e6186af506787a8a66369d1
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
package com.sinata.xqmuse.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.sinata.xqmuse.R
import com.sinata.xqmuse.utils.interfaces.StringCallback
import com.sinata.xqmuse.utils.OSSUtil
import com.sinata.xqmuse.utils.extention.ViewClickDelay.SPACE_TIME
import com.sinata.xqmuse.utils.extention.ViewClickDelay.hash
import com.sinata.xqmuse.utils.extention.ViewClickDelay.lastClickTime
import com.sinata.xqmuse.utils.glide.GlideUtil
import com.ypx.imagepicker.utils.PBitmapUtils
import kotlinx.android.synthetic.main.activity_course_deatil.*
import org.jetbrains.anko.toast
import top.zibin.luban.Luban
import top.zibin.luban.OnCompressListener
import java.io.File
import java.lang.Exception
 
 
fun String.uploadWithCompress(act:BaseActivity,callback: StringCallback){
    Luban.with(act).load(File(this))
        .ignoreBy(100).setTargetDir(PBitmapUtils.getPickerFileDirectory(act).absolutePath + File.separator)
        .filter { path -> path.isNotEmpty() || path.toLowerCase().endsWith(".gif") }
        .setCompressListener(object :OnCompressListener{
            override fun onSuccess(file: File) {
                Log.e("gwx","压缩完成")
                Thread(Runnable {
                    val uploadSingle = OSSUtil(act).uploadSingle(file.path)
                    act.runOnUiThread {
                        act.dismissDialog()
                        callback.onResult(uploadSingle)
                        if (file.path != this@uploadWithCompress)
                            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 = 2000
}
 
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 Double.formatDistance() = if(this>1000) "%.2fkm".format(this/1000) else "%dm".format(this.toInt())