Android 通过View生成Bitmap

Android 通过View生成Bitmap

复制代码
fun getBitmapByView(view: View?): Bitmap? {
    if (null == view) {
        return null
    }
    var bitmap: Bitmap? = null

    // 步骤一:获取视图的宽和高
    val width: Int = view.getRight() - view.getLeft()
    val height: Int = view.getBottom() - view.getTop()

    // 判断背景是否为不透明
    val opaque = view.getDrawingCacheBackgroundColor() !== 0 || view.isOpaque()
    val quality: Bitmap.Config
    quality = if (!opaque) {
        when (view.getDrawingCacheQuality()) {
            DRAWING_CACHE_QUALITY_AUTO, DRAWING_CACHE_QUALITY_LOW, DRAWING_CACHE_QUALITY_HIGH -> Bitmap.Config.ARGB_8888
            else -> Bitmap.Config.ARGB_8888
        }
    } else {
        Bitmap.Config.RGB_565
    }

    // 步骤二:生成bitmap
    bitmap = Bitmap.createBitmap(resources.displayMetrics, width, height, quality)
    bitmap.density = resources.displayMetrics.densityDpi
    if (opaque) {
        bitmap.setHasAlpha(false)
    }
    val clear = view.getDrawingCacheBackgroundColor() !== 0

    // 步骤三:绘制canvas
    val canvas = Canvas(bitmap)
    if (clear) {
        bitmap.eraseColor(view.getDrawingCacheBackgroundColor())
    }
    view.computeScroll()
    val restoreCount: Int = canvas.save()
    canvas.translate((-view.getScrollX()).toFloat(), (-view.getScrollY()).toFloat())
    view.draw(canvas)
    canvas.restoreToCount(restoreCount)
    canvas.setBitmap(null)
    return bitmap
}
相关推荐
IAM四十二9 天前
Google 端侧 AI 框架 LiteRT 初探
android·深度学习·tensorflow
CYRUS_STUDIO9 天前
手把手教你用 Chrome 断点调试 Frida 脚本,JS 调试不再是黑盒
android·app·逆向
Just丶Single9 天前
安卓NDK初识
android
编程乐学9 天前
网络资源模板--基于Android Studio 实现的咖啡点餐App
android·android studio·大作业·奶茶点餐·安卓移动开发·咖啡点餐
二流小码农9 天前
鸿蒙开发:基于node脚本实现组件化运行
android·ios·harmonyos
Wgllss9 天前
Kotlin+协程+FLow+Channel+Compose 实现一个直播多个弹幕效果
android·架构·android jetpack
顾林海9 天前
Android WebView内存释放全解析:从泄漏检测到彻底释放的实战指南
android·面试·性能优化
用户2018792831679 天前
🍕 披萨工厂奇遇记:Android APK打包之旅
android
程序猿陌名!9 天前
Android开发 原生设置-apps-里面隐藏应用信息
android
张风捷特烈10 天前
每日一题 Flutter#13 | build 回调的 BuildContext 是什么
android·flutter·面试