2011-05-08 88 views
0

我有一个尺寸为400 x 70像素的位图。我想将该位图向上滚动一行,并用新像素填满第70行。 我试图通过将位图复制到IntBuffer来滚动位图,将其复制到另一个IntBuffer(从第二行开始),然后将其写回位图。 这可行,但它需要很多的CPU功率,它有点慢。 有没有更快的方法来做到这一点?Android - 在自定义视图中滚动位图

private Bitmap shift(Bitmap bitmap) 
{ 
    buffer.rewind(); 
    buffer1.rewind(); 
    bitmap.copyPixelsToBuffer(buffer); 
    buffer.position(bitmap.getWidth()); 
    buffer1.put(buffer.array(), bitmap.getWidth()*2, bitmap.getWidth() * bitmap.getHeight()); 
    buffer1.rewind(); 
    bitmap.copyPixelsFromBuffer(buffer1); 

    return bitmap; 
} 

回答

0

这是使用帆布做到这一点的一种方法:

canvas.drawBitmap(bgr, bgrPosition, 0, null); 
    canvas.drawBitmap(bgr, 0 - bgrW + bgrPosition, 0, null); 

    //next value for the background's position 
    if ((bgrPosition += bgrDx) > bgrW){ 
     bgrPosition = 0; 
    } 

bgrDx是滚动的尝试bgrDx = 1的速度,而bgrW是BGR位图的宽度。 此方法重复图像并产生无限滚动,但是您需要使用循环图像(两端相同)以使滚动看起来无缝。也许你应该尝试一下,看看它是否对你有更好的表现。

+0

谢谢你的帮助。你给了我一个很好的提示。我现在正在使用第二个画布,并带有一个底部位图,并使用以下参数进行滚动:canvas1.drawBitmap(bitmap,0,-2,null); \t canvas.drawBitmap(bitmap,0,0,p); – catostay 2011-05-08 20:24:43

+0

如果你在一个属于视图的画布上滚动一个较小的区域,那么你可以使用canvas.drawBitmap(bitmap,fromRect,toRect,null);其中fromRect = new Rect(0,0,bitmap.getWidht(),bitmap.getHeight())和toRect = new Rect(x,y,x + w,y + h);即画布上的矩形。用这种方法可以避免使用新的canvas1 – Lumis 2011-05-08 21:31:32