我正在寻找加快一些动画的方法。
我遇到this article,传递中提到在静态字段中存储大位图有助于应用程序加载时间(参见第4段)。
AnimationDrawable的等效技术是什么?
甚至可以在动画可绘制中预加载帧吗?它们是默认预装的吗?这会帮助我加快速度吗?
我正在运行一个由.png组成的帧动画,它是256x256,它们被缩小到图像视图的大小,我估计大约是100x100,当应用程序用于我的屏幕尺寸不同的设备,但是我的app的onCreate方法被调用后,这个100x100图像视图的大小不会改变。
解决方案:我按如下方式修改了接受的解决方案,以便我可以使用Android使用的标准动画格式(并且我已经编码了我的动画):
public Bitmap[] setAnimationArray(int res_anim){
this.my_view.setBackgroundResource(res_anim); //view sized properly elsewhere
AnimationDrawable t_anim = (AnimationDrawable) this.my_view.getBackground();
Bitmap[] anim = new Bitmap[t_anim.getNumberOfFrames()];
for(int i = 0;i<t_anim.getNumberOfFrames();i++){
anim[i]=((BitmapDrawable) t_anim.getFrame(i)).getBitmap(); //extract bitmaps from the animation
}
return anim;
编辑:对于下面的答案,我想补充一点,手动表面视图中的动画似乎比使用标准方法动画要快得多。搜索Android SurfaceView以获取更多信息。
答案 0 :(得分:0)
在arrays.xml中定义你的位图,如下所示:
<array name="targetFrames">
<item>@drawable/bitmap1</item>
<item>@drawable/bitmap2</item>
...
</array>
您可以执行以下操作来创建位图数组:
private void setupTargetFrames() {
TypedArray targetResources = context.getResources().obtainTypedArray(R.array.targetFrames);
targetFrames = new Bitmap[targetResources.length()];
for (int i = 0; i < targetResources.length(); i++) {
targetFrames[i] = BitmapFactory.decodeResource(context.getResources(), targetResources.getResourceId(i, R.drawable.defaulBitmap));
}
targetResources.recycle();
}
然后在位图中循环播放动画。
如果要在加载位图时缩放位图,请参阅BitmapFactory的其他方法。