2

我正在 Android 设备上开发漫画阅读应用程序。我添加了许多功能以使其对电子墨水设备更加用户友好,但我仍然面临一个问题。

在更改页面后,可以看到以前页面的重影。在某些每次更新都会刷新整页的设备上这不是问题,例如 Nook Simple Touch(rooted),但在其他设备上可能会非常明显,例如 Onyx Lynx T68。完全刷新会使屏幕暂时闪烁为负数,然后所有重影都消失了。

如何执行整页刷新以清除所有重影?我认为这是可以做到的,因为 Onyx Lynx 在其最新的固件更新中包含了“强制完全刷新”选项。它可以通过按住其中一个按钮来触发。不过,我担心它可能需要一个根。

4

1 回答 1

1

它确实是特定于设备的。我有两种方法。

1)肮脏的黑客

首先创建“负”油漆:

float[] colorMatrix_Negative = { -1.0f, 0, 0, 0, 255, // red
            0, -1.0f, 0, 0, 255, // green
            0, 0, -1.0f, 0, 255, // blue
            0, 0, 0, 1.0f, 0 // alpha
    };
private final Paint mPaintNegative = new Paint();
private final ColorFilter colorFilter_Negative = new ColorMatrixColorFilter(colorMatrix_Negative);

在 ImageView 中显示图像时,您可以在 onDraw 中执行以下操作:

protected void onDraw(Canvas canvas) {
    if (mBitmap != null && !mBitmap.isRecycled()) {
        if(isNewImage) {
            canvas.drawBitmap(mBitmap, mImgTrans.srcRect, mImgTrans.viewRect, mPaintNegative);
            invalidate();
        } else {
            canvas.drawBitmap(mBitmap, mImgTrans.srcRect, mImgTrans.viewRect, mPaint);
        }
     }
}

这将首先为一帧绘制负片,然后是正常的。它可以很好地消除重影,并模拟真实的东西。您可以通过多种方式对其进行改进,例如将负帧显示更长的时间等。总体而言,这是非常丑陋的 hack,但在大多数设备上都可以正常工作。

2)真实方式

就 Onyx 设备而言,您可以要求 Onyx 为您提供对其 SDK 的访问权限。它提供了具有以下功能的 EpdController:

  • 刷新屏幕(视图,模式)
  • 无效(视图,模式)
  • postInvalidate(视图,模式)

它可以让您在必要时强制刷新。您也可以根据需要选择刷新模式,但没有很好地记录哪种模式是什么。

更好的是,您可以在同一个控制器中使用

  • setViewDefaultUpdateMode(视图,模式)

这使您可以更改为更适合您需求的模式,并让设备负责其余的工作。那里还有很多其他有用的东西。

我使用 sales@onyx-international.com 与他们联系,但您最好使用 dev@onyx-international.com

由于您可以使用该 SDK 检测您是否在 Onyx 设备上,您仍然可以让用户在设置中激活 E-ink 模式,然后从答案 1) 或类似的东西退回到黑客。

于 2014-09-19T21:14:43.613 回答