#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() должен выполняться правильно? Это означает, что опция загрузки должна открываться и закрываться правильно? но в приведенном выше случае это не так