You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在设置新Bitmap前重置ImageView的平移缩放状态

解决ImageView替换Bitmap后保留旧缩放平移状态的问题

核心修复步骤

你之前的问题出在混用了ImageView的View级变换(scaleX/scaleY、scroll)和Matrix变换,且替换Bitmap时没有彻底重置所有相关状态。按以下步骤修改即可:

  1. 替换Bitmap前,彻底重置ImageView的所有变换属性:

    • 把scaleX、scaleY重置为初始值1.0f
    • 调用scrollTo(0, 0)清空滚动偏移
    • 创建全新的Matrix并设置给ImageView,覆盖旧的变换矩阵
  2. 替换Bitmap后,重新初始化你的变换相关变量(比如centerX、centerY)

修改后的openPdfFromStorage函数

@Throws(IOException::class)
private fun openPdfFromStorage(uri: Uri) {
    var FILE_NAME = getFileName(uri) ?: "temp${Date()}.pdf"
    val fileCopy = File(cacheDir, FILE_NAME)
    copyToCache(fileCopy, uri)

    val fileDescriptor = ParcelFileDescriptor.open(
        fileCopy,
        ParcelFileDescriptor.MODE_READ_ONLY
    )
    mPdfRenderer = PdfRenderer(fileDescriptor)
    pdfpages = mPdfRenderer.pageCount
    pdfnum = 0

    val mPdfPage = mPdfRenderer.openPage(pdfnum)

    val bitmap = Bitmap.createBitmap(
        pdfview.width,
        pdfview.height,
        Bitmap.Config.ARGB_8888
    )
    mPdfPage.render(bitmap, null, null, PdfRenderer.Page.RENDER_MODE_FOR_DISPLAY)

    // --- 新增:替换Bitmap前先重置所有状态 ---
    pdfview.scaleX = 1.0f
    pdfview.scaleY = 1.0f
    pdfview.scrollTo(0, 0)
    pdfview.imageMatrix = Matrix() // 重置为空白矩阵
    // --- 重置结束 ---

    pdfview.setImageBitmap(bitmap)
    // 不需要反复切换ScaleType,保持MATRIX即可
    pdfview.scaleType = ImageView.ScaleType.MATRIX

    m = pdfview.imageMatrix // 此时拿到的是全新的初始矩阵
    pbounds = getImageBounds(pdfview)
    centerX = pbounds.centerX()
    centerY = pbounds.centerY()
    
    mPdfPage.close()
}

为什么之前的方法无效?

  • 你之前先设置Bitmap再切换ScaleType,顺序错误:ImageView在设置Bitmap时会继承当前已有的变换属性,后续切换ScaleType无法覆盖View自身的scaleX/scaleY和滚动状态
  • scrollTo(0,0)、setImageMatrix(Matrix())这些操作需要在设置新Bitmap之前执行,才能确保新Bitmap使用初始状态渲染
  • 你同时维护了ImageView的scaleX/scaleY和imageMatrix的缩放,两者会叠加生效,重置时必须同时处理

内容的提问来源于stack exchange,提问作者jetberrocal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 22:05:08