Je .png plusieurs localiser (images de mon animation) dans le dossier assets
, que je les accèderont par AssetManager
dans ma méthode de onCreate()
de Activity
et remplir mon AnimationDrawable
avec eux. Comme décrit dans le guide dev, il est impossible de démarrer Animation en méthode onCreate()
et si j'ai besoin de le démarrer immédiatement que je devrais remplacer la méthode onWindowFocusChanged()
. Mais même dans une telle implémentation mon objet dessinable n'apparaît pas sur l'écran. Voici le code de mon activité:Création AnimationDrawable des actifs
package org.example.Animation;
import java.io.IOException;
import android.app.Activity;
import android.content.res.AssetManager;
import android.graphics.drawable.AnimationDrawable;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.util.Log;
import android.view.MotionEvent;
import android.widget.ImageView;
import android.widget.LinearLayout;
public class MainActivity extends Activity {
private LinearLayout ll;
private ImageView image;
private AnimationDrawable ad;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ll = new LinearLayout(this);
LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(-2, -2);
image = new ImageView(this);
ll.addView(image, lp);
setContentView(ll);
AssetManager am = getAssets();
ad = new AnimationDrawable();
StringBuilder sb= new StringBuilder("loader/loader-");
// Fetching frames from assets
for(int i = 1; i < 11; i++) {
sb.append(i);
sb.append(".png");
Log.d("DownloadImageTask", "Fetching image: " + sb.toString());
try {
Drawable d = Drawable.createFromStream(am.open(sb.toString()), null);
ad.addFrame(d, 500);
}
catch (IOException e) {
Log.d("ImageViewAdapter", "IOException: " + e.getMessage());
}
sb.delete(14, sb.length()); // 14 - is the index of first digit of frame
}
image.setBackgroundDrawable(ad);
}
@Override
public void onWindowFocusChanged(boolean hasFocus) {
super.onWindowFocusChanged(hasFocus);
ad.start();
}
}
Dites-moi s'il vous plaît ce qui ne va pas dans mon code?
P.S S'il vous plaît, ne me demandez pas pourquoi je n'utilise pas de fichier xml. En short, mon objectif principal est d'éviter l'utilisation du fichier R.java.