Android硬件加速应用程序 - 位图无法更改?

时间:2013-06-06 17:21:45

标签: android

我有一个硬件加速的Android应用程序(清单中的android:hardwareAccelerated =“true”)。我注意到一个有问题的行为,我热衷于下面的测试程序。

我发现当我创建一个Bitmap对象然后每次调用自定义视图的onDraw()时更改它的内容时,渲染到屏幕的位图内容始终保持在第一次绘制位图时的内容。这是我的自定义视图的onDraw()代码:

protected void onDraw(Canvas canvas) 
{       
    if (m_bFirstDraw)
    {
        // This code is only run one time.  It creates three pixel arrays: blue, green, and red
        // Also a single bitmap object is created, to be modified and re-used in every onDraw() call.
        m_bFirstDraw = false;
        for (int i=0; i<3; i++)
        {
            m_aaiImage[i] = new int[this.getWidth() * this.getHeight()];
            Arrays.fill(m_aaiImage[i], 0xFF << (i*8));
        }

        m_bmp = Bitmap.createBitmap(getWidth(), getHeight(), Bitmap.Config.RGB_565);        
    }

    // Now every time through the loop, use a different color       
    m_bmp.setPixels(m_aaiImage[m_iDrawNum%3], 0, getWidth(), 0, 0, getWidth(), getHeight());    
    canvas.drawBitmap(m_bmp, 0, 0, null);

    m_iDrawNum++;
}

在其他地方我有一个按钮,点击后只需在我的自定义视图上调用invalidate(),导致调用onDraw()。

当硬件加速 off 时,一切都按预期工作......当我反复点击按钮时,屏幕会循环显示蓝色,绿色,红色,蓝色,绿色,红色...

然而,当硬件加速打开时,颜色总是相同的 - 无论我第一次绘制它时的位图是什么颜色(上面代码为蓝色)。

这是预期的行为吗?我可以解决它吗?

根据基于我调用的createBitmap()重载的文档,

位图可变的。如果它不可变,则会抛出异常。此外,代码通常是正确的,正如我所描述的那样 - 它在硬件加速关闭时按预期工作。

非常感谢任何帮助。

0 个答案:

没有答案