我正在尝试为图像设置动画(用作背景图像,但这并不重要),以便它将从左向右但以循环方式移动。 例如,如果图像大小与视图大小完全相同,则一旦最右边的像素列超出右边缘,它就会出现在视图的最左侧。
我已经想到了几种方法,但是对我来说这些方法听起来都太复杂了,我确信有更“核心”的方法可以做到这一点。
谢谢, 利奥尔。
答案 0 :(得分:2)
如果Bitmap
和ImageView
的像素大小完全相同,您可以根据需要手动移动像素。
int pixels[];
bitmap.getPixels(pixels, 0, bitmap.getWidth(), 0, 0, bitmap.getWidth(), bitmap.getHeight());
shiftPixels(pixels, width, height);
bitmap.setPixels(pixels, 0, bitmap.getWidth(), 0, 0, bitmap.getWidth(), bitmap.setWidth());
在shiftPixels
中,只需创建原始位图的副本,但在复制像素时,会对像素应用线性移位。像这样的东西(未经测试的伪代码);
void shiftPixels(int inPixels[], int bitmapHeight, int nPixHorizShift)
{
int shift = bitmapHeight * nPixHorizShift;
int outPixels[inPixels.size()];
for i = 1:pixels.size()
outPixels[(i + shift) % outPixels.size()] = inPixels[i];
inPixels = outPixels;
}
答案 1 :(得分:0)
您可以使用canvas.drawBitmap(sourceRectangle,outputRectangle,null)
从条带位图背景中剪切一部分吗?这是一种用于为位图设置动画的类似方法,但您可以在sourceRectangle的左右值中添加一个像素,直到它到达背景条的边缘。