强制在Android上刷新完整的电子墨水

时间:2014-07-30 00:25:32

标签: java android image screen e-ink

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

在更改页面时,可以看到来自先前页面的重影。在某些设备上进行全页面刷新(如Nook Simple Touch(root))不是问题,但在Onyx Lynx T68等其他设备上可能会非常明显。完全刷新会使屏幕闪烁一段时间变为负片,之后所有重影都消失了。

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

1 个答案:

答案 0 :(得分:0)

它确实是特定于设备的。我有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);
        }
     }
}

这将首先为一帧画出负片,然后画一张正片。它可以很好地消除重影,并模拟真实的东西。你可以通过多种方式对其进行改进,例如显示负面框架更长一些等等。总的来说,这是非常难看的黑客,但在大多数设备上运行良好。

2)真实的方式

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

  • refreshScreen(视图,模式)
  • 无效(查看,模式)
  • postInvalidate(查看,模式)

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

你可以在同一个控制器中使用更好的

  • setViewDefaultUpdateMode(view,mode)

这使您可以更改为更符合您需求的模式,让设备负责其余部分。那边有很多其他有用的东西。

我使用sales@onyx-international.com与他们联系,但你可能会更好地使用dev@onyx-international.com

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