2011-05-08 62 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