J'ai créé un dialogue de progression de chargement personnalisé. Et ça marche bien.
Je tourne 12 carrés Images en voici un
Mais quand je veux l'utiliser avec AsynTask, l'animation ne fonctionne pas.
Mon exemple de code est ci-dessous.
Activité où je commence le chargement ... Animation et arrêt.
MainActivity.Java
public class MainActivity extends Activity {
AnimationDrawable loadingViewAnim;
TextView loadigText;
ImageView loadigIcon;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
loadigText = (TextView) findViewById(R.id.textView1);
loadigText.setText("Loading...");
loadigText.setVisibility(View.GONE);
loadigIcon = (ImageView) findViewById(R.id.imageView1);
loadigIcon.setVisibility(View.GONE);
loadigIcon.setBackgroundResource(R.anim.progress_animation_white);
loadingViewAnim = (AnimationDrawable) loadigIcon.getBackground();
}
//When User Touch on Screen The Loading... Animation Starts With Image Rotation
//If I start below code in AsynTask's onPreExecute method it doesn't work
public boolean onTouchEvent(MotionEvent event)
{
loadigText.setVisibility(View.VISIBLE);
loadigIcon.setVisibility(View.VISIBLE);
if (event.getAction() == MotionEvent.ACTION_DOWN)
{
loadingViewAnim.start();
return true;
}
return super.onTouchEvent(event);
}
}
Disposition XML avec un texte simple et une image pour la boîte de dialogue de progression.
activity_main.xml
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:tools="http://schemas.Android.com/tools"
Android:id="@+id/LinearLayout1"
Android:layout_width="fill_parent"
Android:layout_height="fill_parent"
Android:background="#000000"
Android:gravity="center"
Android:orientation="vertical" >
<ImageView
Android:id="@+id/imageView1"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:src="@drawable/progress_sm_w01" />
<TextView
Android:id="@+id/textView1"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_marginTop="10dp"
Android:text="Loading..."
Android:textColor="#ffffff"
Android:textSize="12sp" />
</LinearLayout>
Liste d'animation contenant 12 images Je tourne avec Angle & Durée
progress_animation_white.xml
<animation-list xmlns:Android="http://schemas.Android.com/apk/res/Android">
<item Android:drawable="@drawable/progress_sm_w01" Android:duration="50" />
<item Android:drawable="@drawable/progress_sm_w02" Android:duration="50" />
<item Android:drawable="@drawable/progress_sm_w03" Android:duration="50" />
<item Android:drawable="@drawable/progress_sm_w04" Android:duration="50" />
<item Android:drawable="@drawable/progress_sm_w05" Android:duration="50" />
<item Android:drawable="@drawable/progress_sm_w06" Android:duration="50" />
<item Android:drawable="@drawable/progress_sm_w07" Android:duration="50" />
<item Android:drawable="@drawable/progress_sm_w08" Android:duration="50" />
<item Android:drawable="@drawable/progress_sm_w09" Android:duration="50" />
<item Android:drawable="@drawable/progress_sm_w10" Android:duration="50" />
<item Android:drawable="@drawable/progress_sm_w11" Android:duration="50" />
<item Android:drawable="@drawable/progress_sm_w12" Android:duration="50" />
</animation-list>
Voici le résultat Écran de chargement ..
Ma question est est-il possible d'atteindre le même chargement Animation avec AsynTask.
Votre petite aide sera appréciée.
Eh bien, merci à @Brontok et à @URAndroid pour leur aide. J'ai résolu mon problème ... donc laissez-moi répondre à ma propre question, Hoe j'ai réalisé cette animation de chargement personnalisé
J'ai ajouté quelques images pour l'animation de rotation d'image
Étape 1 - dans le dossier res/dessinable
Exemple: l'un d'eux est ci-dessous, j'ai ajouté
Étape 2 - dans le dossier res/anim créé le nom du fichier d'animation "loading_animation.xml"
<item Android:drawable="@drawable/progress_sm_w01" Android:duration="50" />
<item Android:drawable="@drawable/progress_sm_w02" Android:duration="50" />
<item Android:drawable="@drawable/progress_sm_w03" Android:duration="50" />
<item Android:drawable="@drawable/progress_sm_w04" Android:duration="50" />
<item Android:drawable="@drawable/progress_sm_w05" Android:duration="50" />
<item Android:drawable="@drawable/progress_sm_w06" Android:duration="50" />
<item Android:drawable="@drawable/progress_sm_w07" Android:duration="50" />
<item Android:drawable="@drawable/progress_sm_w08" Android:duration="50" />
<item Android:drawable="@drawable/progress_sm_w09" Android:duration="50" />
<item Android:drawable="@drawable/progress_sm_w10" Android:duration="50" />
<item Android:drawable="@drawable/progress_sm_w11" Android:duration="50" />
<item Android:drawable="@drawable/progress_sm_w12" Android:duration="50" />
</animation-list>
Étape 3 - maintenant créé la disposition de vue de chargement personnalisé dans mon écran (activité) où je dois montrer le chargement
exemple . Disposition XML pour mon écran de connexion Facebook
<LinearLayout
Android:id="@+id/LinearLayout1"
Android:layout_width="fill_parent"
Android:layout_height="fill_parent"
Android:background="#0D000000"
Android:gravity="center"
Android:orientation="vertical"
Android:visibility="gone" >
<ImageView
Android:id="@+id/imageView111"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:src="@drawable/progress_sm_w00"
Android:visibility="gone" />
<TextView
Android:id="@+id/textView111"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_marginTop="10dp"
Android:text="Searching..."
Android:textColor="#ffffff"
Android:textSize="12sp"
Android:visibility="gone" />
</LinearLayout>
Étape 4 - En code Java (Activité), j'ai créé la vue Chargement et, une fois la méthode OnCreate terminée, j'ai lancé Asyn Task afin que mon animation fonctionne correctement.
public class ResultActivity extends Activity {
private static final String TAG = "ResultActivity";
private AnimationDrawable loadingViewAnim=null;
private TextView loadigText = null;
private ImageView loadigIcon = null;
private LinearLayout loadingLayout = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_result);
loadingLayout = (LinearLayout)findViewById(R.id.LinearLayout1);
loadingLayout.setVisibility(View.GONE);
loadigText = (TextView) findViewById(R.id.textView111);
loadigText.setVisibility(View.GONE);
loadigIcon = (ImageView) findViewById(R.id.imageView111);
loadigIcon.setVisibility(View.GONE);
loadigIcon.setBackgroundResource(R.anim.loading_animation);
loadingViewAnim = (AnimationDrawable) loadigIcon.getBackground();
// This line is to start Asyn Task only when OnCreate Method get completed, So Loading Icon Rotation Animation work properly
loadigIcon.post(new Starter());
}
class Starter implements Runnable {
public void run() {
//start Asyn Task here
new LongOperation().execute("");
}
}
private class LongOperation extends AsyncTask<String, Void, String> {
@Override
protected String doInBackground(String... params) {
//ToDo your Network Job/Request etc. here
return "Executed";
}
@Override
protected void onPostExecute(String result) {
//ToDo with result you got from Task
//Stop Loading Animation
loadingLayout.setVisibility(View.GONE);
loadigText.setVisibility(View.GONE);
loadigIcon.setVisibility(View.GONE);
loadingViewAnim.stop();
}
@Override
protected void onPreExecute() {
//Start Loading Animation
loadingLayout.setVisibility(View.VISIBLE);
loadigText.setVisibility(View.VISIBLE);
loadigIcon.setVisibility(View.VISIBLE);
loadingViewAnim.start();
}
@Override
protected void onProgressUpdate(Void... values) {}
}
}
Étape 5 - Voici l'écran de résultat avec l'animation de chargement en cours.
J'espère que ceci vous aidera. À votre santé!!
Peut-être que vous pouvez utiliser _ GLIDE , par exemple
Glide.with(context)
.load(imageUrl)
.asGif()
.placeholder(R.drawable.loading2)
.crossFade()
.into(imageView);
Afficher le fichier GIF avec Glide (bibliothèque de chargement et de mise en cache des images)