我正在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。