如何为PdfRenderer启用暗模式

时间:2019-10-07 08:58:14

标签: android pdfrenderer android-dark-theme

我正在使用PdfRenderer在Android应用程序中打开PDF文件。如果启用了深色主题,则文本为黑色,背景也为黑色,因此看起来像黑屏。在PdfRendere.Page中渲染文本时,可以更改其颜色吗?

    private void showPage(int index) {
    if (pdfRenderer.getPageCount() <= index) {
        return;
    }
    if (null != currentPage) {
        currentPage.close();
    }
    currentPage = pdfRenderer.openPage(index);
    Bitmap bitmap = Bitmap.createBitmap(currentPage.getWidth(), currentPage.getHeight(),
            Bitmap.Config.ARGB_8888);

    currentPage.render(bitmap, null, null, PdfRenderer.Page.RENDER_MODE_FOR_DISPLAY);
    imageViewPdf.setImageBitmap(bitmap);

    }

1 个答案:

答案 0 :(得分:1)

好吧,不确定答案是否正确,但我将位图转换为负片,不确定是否足够有效,但对我有用:

首先,您必须使用pageRenderer渲染位图:

var currentPage: PdfRenderer.Page = pdfRenderer.openPage(position)
currentPage?.render(bitmap, null, null, PdfRenderer.Page.RENDER_MODE_FOR_PRINT)

val nightModeFlags = parent.context.resources?.configuration?.uiMode?.and(Configuration.UI_MODE_NIGHT_MASK)
    darkThemeEnabled = Configuration.UI_MODE_NIGHT_YES == nightModeFlags

if (darkThemeEnabled) {
    bitmap = invert(bitmap)
}

这是使位图为负的代码

private fun invert(original: Bitmap): Bitmap? {
    val inversion = original.copy(Bitmap.Config.ARGB_8888, true)

    val width = inversion.width
    val height = inversion.height
    val pixels = width * height

    val pixel = IntArray(pixels)
    inversion.getPixels(pixel, 0, width, 0, 0, width, height)

    for (i in 0 until pixels) pixel[i] = pixel[i] xor RGB_MASK
    inversion.setPixels(pixel, 0, width, 0, 0, width, height)

    return inversion
}

希望会为您提供帮助。 我必须澄清,这仅适用于文本,如果pdf中有图像,它将以负数显示。