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
}
相关推荐
AI_Gump8 小时前
Harness篇|DeepSeek Harness 上手机:五条安卓移植路线与 App 内 Linux 拆解
android·linux·人工智能·智能手机·deepseek
疯华整猫13 小时前
否决 Flutter 提案那天,我发现自己也说不清 Framework 管什么
android
传奇开心果编程1 天前
【Flutter踩坑排雷】第25课:ScrollController 误用坑|跳转失效、监听泄漏与“控制器未附加”
android·flutter·ios·移动开发·跨平台·dart·声明式ui
慕容雪_1 天前
Capacitor8-Android打包完整手册
android·打包·capacitor
阿杰m1 天前
Android源码第十三章:Bluetooth——沿一次发现走到控制器
android
booboosui1 天前
派活给另一个 AI:前后两次文件夹快照,就是交付清单
android
普通人62 天前
MySQL_FIND_IN_SET函数详解
android·数据库·mysql
好的佩奇2 天前
Dart 之集合元素
android·flutter·dart
Easyhood2 天前
Android 开发入门实践(十四):Compose 副作用入门与四个常用 API
android·开发语言·kotlin·android jetpack·compose
FlightYe2 天前
音视频修炼之容器与协议(四):RTSP详解
android·linux·ffmpeg·音视频·dash