2012-07-14 75 views
2

我创建了一个位图图像,它是一个圆形,并且比我想要的更加动画,所以我将它转换为bitmapdrawable,并将其添加到动画绘制中。但是由于这个圆形已经改变以椭圆形...在android中动画位图图像

那么我该怎么办?

是否有任何其他方法只动画位图文件。 ?

在此先感谢..

回答

3

不,你不能与android animation framwork动画bitmap本身。您可以直接动画ViewViewGroup和所有从ViewViewGroup派生的类。

请致电viewImageView包含位图。

TranslateAnimation slide = new TranslateAnimation(view.getX(), view.getX() + 100, view.getY(), view.getY() + 100); 
slide.setDuration(1000); 
view.startAnimation(slide) 

应该如果你使用Canvas从当前位置

+0

那么我应该怎么做动画我创建使用位图的圆? – aagam94 2012-07-14 10:36:39

+2

将位图放入视图中,并为视图本身设置动画。我将用一个例子编辑我的答案 – Blackbelt 2012-07-14 10:38:53

3

翻译ImageView通过100px,我建议持有指向当前的位图和加载所有其他位图到一个数组。

说,

Bitmap[] frames = new Bitmap[10] //10 frames 
Bitmap frame[0] = BitmapFactory.decodeResource(getResources(), R.drawable.circlefram1); 
Bitmap frame[1] = BitmapFactory.decodeResource(getResources(), R.drawable.circlefram2); 
... 

通过在你感兴趣的框架指向选择设置currentFrame。

Bitmap currentBitmap = frame[3]; // 4th frame 

所以,当你调用drawBitmap(currentBitmap)它只会吸引你的框架感兴趣。您可以通过为帧动画分配fps来为每帧这么多帧更改位图。

如果您只是想缩放或旋转位图(旋转圆圈?),调整位图大小的最佳方法是使用createScaledBitmap,并使用矩阵进行旋转。

缩放,你的任何位图加载到内存中这样

Bitmap circleBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.circle); 

如果你想圆(或位图)重新调整,你会做这样的事情:

Bitmap scaledCircle = Bitmap.createScaledBitmap(circleBitmap, dstWidth, dstHeight, filter); 

凡dstWidth和dstHeight是目标目标宽度和高度,您可以通过缩放原始宽度和高度来计算。

int scaledHeight = circleBitmap.getHeight()/2; 
int scaledWidth = circleBitmap.getWidth()/2; 

最后,你通常会画出用帆布这样

canvas.drawBitmap(bitmap) 

对于旋转该位图,创建一个矩阵

Matrix mat; 
mat.postRotate(degrees); // Rotate the matrix 
Bitmap rotatedBitmap = Bitmap.createBitmap(originalBitmap, x, y, width, height, mat, filter); 

最后

canvas.drawBitmap(rotatedBitmap); 

保持记住画布对于游戏或其他任何实时都很慢!

希望它有帮助。