android常用方法

object Utils {
    private var lastClickTime = 0L
    private const val MIN_TIME = 1000L

    /**
     * 防止過快點擊
     */
    fun isFastDoubleClick(): Boolean {
        val time = System.currentTimeMillis()
        return if (time - lastClickTime < MIN_TIME) {
            true
        } else {
            lastClickTime = time
            false
        }
    }

    /**
     * 時間戳轉日期
     */
    fun stampToDate(long: Long): String {
        val simpleDateFormat = SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.getDefault())
        val date = Date(long)
        return simpleDateFormat.format(date)
    }

    /**
     * 日期轉時間戳
     */
    fun dateToStamp(s: String): Int {
        val simpleDateFormat = SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.getDefault())
        val date = simpleDateFormat.parse(s)
        return (date.time / 1000).toInt()
    }

    /**
     * 獲取手機分辨率
     */
    fun getPhoneDis(context: Context): Point {
        val displayMetrics = DisplayMetrics()
        val windowManager = context.getSystemService(Context.WINDOW_SERVICE) as WindowManager
        windowManager.defaultDisplay.getMetrics(displayMetrics)
        val widthPixels = displayMetrics.widthPixels
        val heightPixels = displayMetrics.heightPixels
        return Point(widthPixels, heightPixels)
    }

    /**
     * 獲取手機真是分辨率
     */
    @SuppressLint("NewApi")
    fun getPhoneRealDis(context: Context): Point {
        val displayMetrics = DisplayMetrics()
        val windowManager = context.getSystemService(Context.WINDOW_SERVICE) as WindowManager
        windowManager.defaultDisplay.getRealMetrics(displayMetrics)
        val widthPixels = displayMetrics.widthPixels
        val heightPixels = displayMetrics.heightPixels
        return Point(widthPixels, heightPixels)
    }


    /**
     * 圖片質量壓縮
     * @param quality 圖片的質量,0-100,數值越小質量越差
     */
    fun imgQualityCompressed(context: Context,quality: Int,originFile:File) : File?{
        val originBitmap = BitmapFactory.decodeFile(originFile.absolutePath)
        val bos = ByteArrayOutputStream()
        originBitmap.compress(Bitmap.CompressFormat.JPEG, quality, bos)
        val resultFile = File(context.getExternalFilesDir(""),"${System.currentTimeMillis()}.jpg")
        return try {
            val fos = FileOutputStream(resultFile)
            fos.write(bos.toByteArray())
            fos.flush()
            fos.close()
            resultFile
        } catch (e: FileNotFoundException) {
            e.printStackTrace()
            null
        } catch (e: IOException) {
            e.printStackTrace()
            null
        }
    }

    /**
     * 圖片採樣率壓縮
     * @param inSampleSize  可以根據需求計算出合理的inSampleSize
     */
    fun imgSamplingCompressed(context: Context, inSampleSize: Int,originFile:File) :File?{
        val options: BitmapFactory.Options = BitmapFactory.Options()
        //設置此參數是僅僅讀取圖片的寬高到options中,不會將整個圖片讀到內存中,防止oom
        options.inJustDecodeBounds = true
        val empryBitmap = BitmapFactory.decodeFile(originFile.absolutePath, options)
        options.inJustDecodeBounds = false
        options.inSampleSize = inSampleSize
        val resultBitmap = BitmapFactory.decodeFile(originFile.absolutePath, options)
        val bos = ByteArrayOutputStream()
        resultBitmap.compress(Bitmap.CompressFormat.JPEG, 100, bos)
        val resultFile = File(context.getExternalFilesDir(""),"${System.currentTimeMillis()}.jpg")
        return try {
            val fos = FileOutputStream(resultFile)
            fos.write(bos.toByteArray())
            fos.flush()
            fos.close()
            resultFile
        } catch (e: FileNotFoundException) {
            e.printStackTrace()
            null
        } catch (e: IOException) {
            e.printStackTrace()
            null
        }
    }

    /**縮放壓縮
     * @param radio 縮放比例
     */
    fun imgScaleCompressed(context: Context, radio: Int,originFile:File) :File?{
        val originBitmap = BitmapFactory.decodeFile(originFile.absolutePath)
        val resultBitmap = Bitmap.createBitmap(originBitmap.width / radio, originBitmap.height / radio, Bitmap.Config.ARGB_8888)
        val canvas = Canvas(resultBitmap)
        val rectF = RectF(0F, 0F, (originBitmap.width / radio).toFloat(), (originBitmap.height / radio).toFloat())
        canvas.drawBitmap(originBitmap, null, rectF, null)
        val bos = ByteArrayOutputStream()
        resultBitmap.compress(Bitmap.CompressFormat.JPEG, 100, bos)
        val resultFile = File(context.getExternalFilesDir(""),"${System.currentTimeMillis()}.jpg")
        return try {
            val fos = FileOutputStream(resultFile)
            fos.write(bos.toByteArray())
            fos.flush()
            fos.close()
            resultFile
        } catch (e: FileNotFoundException) {
            e.printStackTrace()
            null
        } catch (e: IOException) {
            e.printStackTrace()
            null
        }
    }

}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章