Я использую два изображения (img_heart_1
и img_heart_2
).У меня есть две анимации, одна трансляционная и другая с масштабированием text_anim.xml: animi(Animation)
, bounce_up.xml :bounce_up_anim(Animation)
Результат - последовательные и разные анимации, ожидаемый результат.но если я вырежу secAnim.execute();
из firstAnimationAsync
и введу onResume
, обе анимации будут запускаться одновременно, только один раз
Если я сохраню secAnim.execute()
в onResume()
, и вместо img_heart_2.startAnimation(animi);
img_heart_2.startAnimation(bounce_up_anim);
он будет запущен один раз, одновременно.
Если я положу secAnim.execute()
в onPostExecute()
из firstAnimationAsync
и оставлю startAnimation(animi)
для обоих изображений, теперь первая анимация будет запускаться в первый раз, затем во второй раз - обе анимации.
Почему это так?
Кроме того, если два изображения происходят одновременно, второе выглядит немного прижатым (сжато вертикально вниз).Я также поставил da=null
, (теперь прокомментировал), разве это не должно аннулировать эту анимацию?
Я также хочу, чтобы моя трансляционная анимация осталась без конца или стала невидимой.
код: text_anim.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:shareInterpolator="false"
>
<translate
android:fromXDelta="0"
android:toXDelta="50"
android:fromYDelta="0"
android:toYDelta="100"
android:duration="3000"
android:fillAfter="false"/>
</set>
код: bounce_up.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:shareInterpolator="false">
<scale
android:fromXScale="1.0"
android:toXScale="2.0"
android:fromYScale="1.0"
android:toYScale="3.0"
android:pivotX="50%"
android:pivotY="0%"
android:duration="3000"/>
</set>
код: anidro.java
package my.trials.anidro;
import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.View;
import android.view.Window;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.ImageView;
public class anidro extends Activity {
ImageView img_heart_1,img_heart_2, img_heart_3;
Animation animi, bounce_up_anim;
Bitmap b1,b2;
firstAnimationAsync da;
secondAnimAsync secAnim;
@Override
public void onPause(){
super.onPause();
}
@Override
public void onResume(){
super.onResume();
InitializeLayouts();
**da.execute();**
}
@Override
public void onCreate(Bundle savedInstanceState) {
this.requestWindowFeature(Window.FEATURE_NO_TITLE);
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
private void InitializeLayouts() {
img_heart_1=(ImageView)findViewById(R.id.lay_main_heartImg);
img_heart_2 = (ImageView)findViewById(R.id.lay_main_heart2Img);
**bounce_up_anim**=AnimationUtils.loadAnimation(this, R.anim.bounce_up);
**animi** = AnimationUtils.loadAnimation(this, R.anim.text_anim);
b1 = BitmapFactory.decodeResource(getResources(),R.drawable.anidro_heart2);
b2=BitmapFactory.decodeResource(getResources(), R.drawable.anidro_heart3);
da= new firstAnimationAsync();
secAnim = new secondAnimAsync();
//img_heart_12=(ImageView)findViewById(R.id.lay_main_koalaImg);
}
private class firstAnimationAsync extends AsyncTask<Void, Void, Void>{
protected void onPreExecute(){
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
img_heart_1.setImageBitmap(b1);
img_heart_1.setVisibility(View.VISIBLE);
img_heart_1.startAnimation(**animi**);
//img_heart_1.setVisibility(View.INVISIBLE);
}
@Override
protected Void doInBackground(Void...params){
try{
Thread.sleep(1800);
}
catch(InterruptedException e){
e.printStackTrace();
}
return null;
}
protected void onPostExecute(Void v){
**secAnim.execute();**
//da=null;
return;
}
}
private class secondAnimAsync extends AsyncTask<Void, Void, Void>{
protected void onPreExecute(){
img_heart_2.setImageBitmap(b2);
//da=null;
img_heart_2.setVisibility(View.VISIBLE);
//img_heart_1.setVisibility(View.INVISIBLE);
img_heart_2.startAnimation(**bounce_up_anim**);
}
protected Void doInBackground(Void...params){
try{
Thread.sleep(5000);
}
catch(InterruptedException e){
e.printStackTrace();
}
return null;
}
protected void onPostExecute(Void v){
//secAnim = null;
return;
}
}
}