【发布时间】:2011-04-10 10:20:22
【问题描述】:
我在 drawable 目录中有一系列静止图像,总共有 500 多张图像。我需要制作一个动画(每秒加载大约 20 张图像)。我希望它能够顺利运行并且没有内存不足异常。
我的想法是,将 2 到 3 秒的图像(40 到 60 个图像)加载到内存中并显示,然后将它们处理掉(释放内存),然后再将接下来 2 到 3 秒的图像加载。这种技术可以防止内存不足异常。它只是一个想法,我不知道它是否是一个好主意。请用一些代码指导我一些更好的想法......如果我的想法更好并且可以工作,那么请告诉我一些帮助代码来做到这一点。
阅读回复并按照您的建议进行操作后,我编写了如下代码:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:id="@+id/llMain">
<ViewFlipper android:id="@+id/imageflipper"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<ImageView android:id="@+id/ImageView01"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:scaleType="centerInside"
android:layout_gravity="center" />
</ViewFlipper>
</LinearLayout>
这是我做动画的代码:
public class Animation extends Activity {
ViewFlipper flipper;
int myIndex = 216;
private final Handler handler = new Handler();
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
flipper=(ViewFlipper)findViewById(R.id.imageflipper);
doTheAutoRefresh();
//displayData();
}
private void doTheAutoRefresh() {
handler.postDelayed(new Runnable() {
public void run(){
displayData(); // this is where you put your refresh code
doTheAutoRefresh();
}
}, 30);
}
private void displayData()
{
Resources r = getResources();
if(myIndex > 230){
myIndex = 216;
ImageView myImg = (ImageView)findViewById(R.id.ImageView01);
myImg.setImageResource(r.getIdentifier("drum0" + myIndex, "drawable", "com.vt.animation"));
myIndex += 1;
flipper.showNext();
}
else{
ImageView myImg = (ImageView)findViewById(R.id.ImageView01);
myImg.setImageResource(r.getIdentifier("drum0" + myIndex, "drawable", "com.vt.animation"));
myIndex += 1;
flipper.showNext();
}
}
}
但它非常慢。我已将刷新时间设置为 30 毫秒,但实际上它的刷新速度不会太快,而是刷新时间约为 1 秒。有什么建议可以让它感觉像真正的动画一样快吗?
谢谢,
【问题讨论】: