Uella, TransitionDrawable permette di fadeare tra due drawable e io vorrei fare un fade dal primo al secondo e dal secondo ad un terzo.
Tra l'altro il Transition non permette neanche di avere un controllo sull'animazione, anche per sapere se sta ancora andando o meno.
So che c'è il metodo scheduleDrawable, ma non ho capito come funziona... (Cioè non so cosa mettere nel "what" (il parametro runnable). Se c'è qualcuno che mi puo fare un esempio... )
Allora ho provato a fare questo:
codice:
package com.animazione.it;
import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.drawable.Drawable;
import android.graphics.drawable.LayerDrawable;
import android.graphics.drawable.TransitionDrawable;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.RelativeLayout;
import android.widget.TextView;
public class Main extends Activity {
private RelativeLayout layout;
private Button bottone;
private TextView testo, debug;
private LayerDrawable disegno;
private TransitionDrawable prova;
private provaDrawable trans;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
layout = (RelativeLayout)findViewById(R.id.layout);
disegno = new LayerDrawable(new Drawable[]{this.getResources().getDrawable(R.drawable.earthrise), // <- Questo l'ho preso da Lunar Lander
getResources().getDrawable(R.drawable.bianco), // <- Questo è un png 2x2 tutto bianco
getResources().getDrawable(R.drawable.prova)}); // <- Questo è un png mezzo trasparente e mezzo no
layout.setBackgroundDrawable(disegno);
testo = (TextView)findViewById(R.id.text);
debug = (TextView)findViewById(R.id.DebugText);
debug.setScrollContainer(true);
bottone = (Button)findViewById(R.id.Button01);
bottone.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View arg0) {
splasha();
}});
}
private void splasha(){
float tempo = 20000;
float incremento = 255/tempo;
float alpha;
testo.setText(getString(R.string.animazione_progresso));
for (int i = disegno.getNumberOfLayers()-1; i>-1 ; i--){
alpha=255;
while(alpha >= 0){
disegno.getDrawable(i).setAlpha(Math.round(alpha));
alpha -= incremento;
layout.invalidate(); // <-- Questo so che non cambia le cose e neanche disegno.invalidateItself() :)
}
}
testo.setText(getString(R.string.animazione_finita));
}
}
Pero non mi fa un effetto fade, perché prima fa il ciclo while e solo alla fine di questo mi fa vedere l'effetto, cioè quando l'alfa dei tre drawable è gia a 0.
Qualcuno sa come mai non mi fa vedere l'effetto graduale?
(Quello che fa splasha sarebbe/sarà messo in un thread.)