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