2013-04-25 5 views
1

Теперь я пишу программу для воспроизведения списка изображений с помощью AnimationDraawable в приложении для Android. Список изображений загружается с сервера. Но я столкнулся с ошибкой в ​​своей программе, которая не может добавить drawable в AnimationDrawable. Может кто-нибудь мне помочь?Анимированная анимация для Android с помощью BitmapDrawable

Вот мой 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(); 
} 
} 

ответ

0

Потому что это не AnimationDrawable. Это просто изображение, поэтому оно является BitmapDrawable.

+0

Хотя это может дать ответ, его следует улучшить, чтобы включить какой-то код или какое-то дополнительное объяснение. –

+0

@WimOmbelets Ну, это просто исключение класса. И я не знаю, что я должен предоставить, чтобы сделать эту кастинговую работу. – berserk

+1

Может быть, объясните, почему он не будет работать по-настоящему, как заставить его работать с AnimationDrawable, как изменить код ...? (ваш ответ находится в очереди просмотра «низкого качества» и, как есть, он может быть удален) – thomasb