Невозможно отменить анимированную загрузку в onPostExecute() в Android

#android #animation

#Android #Анимация

Вопрос:

Я пытаюсь показать некоторую анимацию при загрузке с помощью asynctask в Android.Но я не могу показать анимацию, которую я ожидаю, более того, я также не смог отменить анимацию. Кто-нибудь может помочь мне решить эту проблему.

спасибо за ваше драгоценное время!..

Show_AnimatedLoading.java

 ImageView imageView;

@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    imageView=(ImageView) findViewById(R.id.imageView1);

    CustomLoad task = new CustomLoad();
    task.execute();
}

 public class CustomLoad extends AsyncTask<Void, Void, Void>
 {

   @Override
   protected void onPreExecute() {
    // TODO Auto-generated method stub

       Show_animation();


   }

   private void Show_animation() {
    // TODO Auto-generated method stub
       Animation a = AnimationUtils.loadAnimation(Show_AnimatedLoading.this, R.anim.progress_anim);
        a.setDuration(2000);
        imageView.startAnimation(a);


        a.setInterpolator(new Interpolator()
        {
            private final int frameCount = 50;

            @Override
            public float getInterpolation(float input)
            {
                return (float)Math.floor(input*frameCount)/frameCount;
            }
        });
}

@Override
   protected Void doInBackground(Void... params) 
   {
    // TODO Auto-generated method stub
    return null;

   }

   @Override
   protected void onPostExecute(Void result) {
    // TODO Auto-generated method stub

       imageView.clearAnimation();

   } 
 }
 

Progress.xml

 <?xml version="1.0" encoding="utf-8"?>
<rotate
xmlns:android="http://schemas.android.com/apk/res/android"
android:fromDegrees="0"
android:toDegrees="360"
android:pivotX="50%"
android:pivotY="50%"
android:repeatCount="infinite" />
 

activity_main.xml

 <?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="#000000">

<ImageView
    android:id="@ id/imageView1"
    android:layout_width="100dp"
    android:layout_height="100dp"
    android:layout_centerHorizontal="true"
    android:layout_centerVertical="true"
    android:contentDescription="@string/app_name"
    android:src="@drawable/transp_load" />

<ImageView
    android:id="@ id/imageView2"
    android:layout_width="80dp"
    android:layout_height="80dp"
    android:layout_centerHorizontal="true"
    android:layout_centerVertical="true"
    android:contentDescription="@string/app_name"
    android:src="@drawable/pc_logo_load" /></RelativeLayout>      
 

Комментарии:

1. «Но я не могу показать анимацию, которую я ожидаю», что вы ожидаете?

2. я пытаюсь повернуть одно изображение

Ответ №1:

Насколько я вижу, ваша AsyncTask не имеет никакой фоновой операции. Итак, «Post execute», где вы очищаете анимацию, начинается сразу после «pre execute», где вы запускаете анимацию. Это нормально, что ты ничего не видишь. Попробуйте выполнить добавление какой-нибудь фоновой операции.

Попробуйте это,

 final Handler handler = new Handler();

    // TODO
    // Pre execute.

    new Thread(new Runnable() {

        @Override
        public void run() {
            // TODO
            // Background operation.


            handler.postDelayed(new Runnable() {

                @Override
                public void run() {
                    // TODO 
                    // Post Execute.

                }
            }, 3000);
        }
    }).start();
 

Комментарии:

1. но, если в doInBackground() ничего нет, значит, onPostExecute() должен выполняться правильно? Это означает, что опция загрузки должна открываться и закрываться правильно? но в приведенном выше случае это не так