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

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

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

最佳答案

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

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:


refreshScreen(视图,模式)
无效(视图,模式)
postInvalidate(视图,模式)


必要时可让您强制刷新。您还可以根据需要选择刷新模式,但是没有很好地说明哪种模式。

甚至可以在同一控制器中使用


setViewDefaultUpdateMode(视图,模式)


这样一来,您便可以更改为更适合自己需求的模式,并让设备负责其余的工作。那边还有很多其他有用的东西。

我已经使用[email protected]与他们联系,但您最好使用[email protected]

由于您可以使用该SDK来检测您是否在Onyx设备上,因此您仍然可以让用户在设置中激活电子墨水模式,然后从答案1)或类似的内容退回到hack。

07-24 09:29