Android - 在自定义视图中滚动位图
问题描述:
我有一个尺寸为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;
}
答
这是使用帆布做到这一点的一种方法:
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位图的宽度。 此方法重复图像并产生无限滚动,但是您需要使用循环图像(两端相同)以使滚动看起来无缝。也许你应该尝试一下,看看它是否对你有更好的表现。
谢谢你的帮助。你给了我一个很好的提示。我现在正在使用第二个画布,并带有一个底部位图,并使用以下参数进行滚动:canvas1.drawBitmap(bitmap,0,-2,null); \t canvas.drawBitmap(bitmap,0,0,p); – catostay 2011-05-08 20:24:43
如果你在一个属于视图的画布上滚动一个较小的区域,那么你可以使用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