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
}
}
}
android常用方法
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.