BitmapDrawable的Android动画可绘制错误

时间:2013-04-25 16:54:59

标签: android drawable android-animation animationdrawable

我现在正在编写一个程序来使用Android应用程序中的AnimationDraawable来播放图像列表。从服务器下载图像列表。但我在程序中遇到错误,无法将drawable添加到AnimationDrawable。任何人都可以帮助我吗?

这是我的logCat捕获:

04-26 00:45:07.260: E/AndroidRuntime(17422): FATAL EXCEPTION: AsyncTask #2
04-26 00:45:07.260: E/AndroidRuntime(17422): java.lang.RuntimeException: An error occured while executing doInBackground()
04-26 00:45:07.260: E/AndroidRuntime(17422):    at android.os.AsyncTask$3.done(AsyncTask.java:299)
04-26 00:45:07.260: E/AndroidRuntime(17422):    at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273)
04-26 00:45:07.260: E/AndroidRuntime(17422):    at java.util.concurrent.FutureTask.setException(FutureTask.java:124)
04-26 00:45:07.260: E/AndroidRuntime(17422):    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307)
04-26 00:45:07.260: E/AndroidRuntime(17422):    at java.util.concurrent.FutureTask.run(FutureTask.java:137)
04-26 00:45:07.260: E/AndroidRuntime(17422):    at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
04-26 00:45:07.260: E/AndroidRuntime(17422):    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
04-26 00:45:07.260: E/AndroidRuntime(17422):    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
04-26 00:45:07.260: E/AndroidRuntime(17422):    at java.lang.Thread.run(Thread.java:856)
04-26 00:45:07.260: E/AndroidRuntime(17422): Caused by: java.lang.ClassCastException: android.graphics.drawable.BitmapDrawable cannot be cast to android.graphics.drawable.AnimationDrawable
04-26 00:45:07.260: E/AndroidRuntime(17422):    at com.tlab.shopping.Itemview$itemanimation.doInBackground(Itemview.java:1036)
04-26 00:45:07.260: E/AndroidRuntime(17422):    at com.tlab.shopping.Itemview$itemanimation.doInBackground(Itemview.java:1)
04-26 00:45:07.260: E/AndroidRuntime(17422):    at android.os.AsyncTask$2.call(AsyncTask.java:287)
04-26 00:45:07.260: E/AndroidRuntime(17422):    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
04-26 00:45:07.260: E/AndroidRuntime(17422):    ... 5 more

这是我的代码:

public static class itemanimation extends AsyncTask<String, Void, AnimationDrawable>{
    public Itemview myActivity;
    public  itemanimation(Itemview a)
    {
        myActivity = a;
    }

protected void onPreExecute(){
 //text.setText("load");
}

protected AnimationDrawable doInBackground(String... x){
Bitmap bmImg = null;
URL myFileUrl =null; 
String code = x[0];
String cur_url = null;
ImageView im = (ImageView) myActivity.findViewById(R.id.imageView1);

AnimationDrawable anim = null;          
Object ob = im.getBackground();          
anim = (AnimationDrawable) ob;  

for (int frameIndex = 0; frameIndex < 4; frameIndex++) {

    cur_url = "http://137.189.97.18/image/" + code + frameIndex +".jpg";
    try {   
    myFileUrl= new URL(cur_url);
    } catch (MalformedURLException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    try {
    HttpURLConnection conn= (HttpURLConnection)myFileUrl.openConnection();
    conn.setDoInput(true);
    conn.connect();
    int length = conn.getContentLength();
    int[] bitmapData =new int[length];
    byte[] bitmapData2 =new byte[length];
    InputStream is = conn.getInputStream();

    bmImg = BitmapFactory.decodeStream(is);
    Bitmap bmp = Bitmap.createScaledBitmap(bmImg, 150, 150,true);

    Drawable bmpImgDrawable = Drawable.createFromStream(is, code + frameIndex + ".jpg");
    anim.addFrame(bmpImgDrawable, 250);

    } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }

}
anim.setOneShot(false);
return anim;

}

protected void onProgressUpdate(){

}

protected void onPostExecute(AnimationDrawable z){
ImageView image = (ImageView) myActivity.findViewById(R.id.imageView1);

image.setBackgroundColor(00000000);
//image.setImageBitmap(bmp);
image.setBackgroundDrawable(z);
z.stop();          
z.start(); 
}
}

1 个答案:

答案 0 :(得分:0)

因为它不是AnimationDrawable。它只是一个图像,所以它是一个BitmapDrawable。