package org.easydarwin import android.graphics.Bitmap import android.graphics.Color import android.text.TextUtils import org.easydarwin.util.YUVUtils import java.text.SimpleDateFormat /** * Created by John on 2017/2/23. */ object TxtOverlay { // 提示变化的监听 private var mTipChangeListener: (() -> Unit)? = null; // 上一次展示的提示文字 private var mLastShowTip = "" // 待展示的提示文字 private var mToDoShowTip = "" // 外部调用,设置待显示水印文字 fun setShowTip(string: String) { mToDoShowTip = string buildOverlayBitmap() mTipChangeListener?.invoke() } // 上一次展示的时间 private var lastTipUpdateTime: Long = 0 private const val bmpWidth: Int = 500 private const val bmpHeight: Int = 300 // 文字生成的bitmap private var bmp: Bitmap? = Bitmap.createBitmap(bmpWidth, bmpHeight, Bitmap.Config.ARGB_8888); private var yuv: ByteArray? = null // 时间格式化字符串 private val dateFormat = SimpleDateFormat("yy-MM-dd HH:mm:ss") fun buildOverlayBitmap() { if (TextUtils.isEmpty(mToDoShowTip)) { return } val currentTimeMillis = System.currentTimeMillis() // 限制获取bitmap的频率,保证性能 if (TextUtils.isEmpty(mLastShowTip) || mToDoShowTip != mLastShowTip || currentTimeMillis - lastTipUpdateTime > 1000) { // 记录更新时间和上一次的文字 lastTipUpdateTime = currentTimeMillis mLastShowTip = mToDoShowTip // 文字转bitmap YUVUtils.generateBitmap( bmp, dateFormat.format(lastTipUpdateTime) + "@" + mToDoShowTip, 40, Color.WHITE ) yuv = YUVUtils.getYUVByBitmap(bmp) } } fun getOverlayBitmap(): Bitmap? { return bmp; } fun getOverlayYuv(): ByteArray? { return yuv; } fun setTipChangeListener(onChange: () -> Unit) { mTipChangeListener = onChange } }