2013-05-28 9 views
31

Ich muss eine Bildschaltfläche anzeigen, die ein- und ausblendet (und hinein und heraus und so weiter ...) Die Transparenz kann mit setAlpha eingestellt werden, aber wie kann ich ein- und ausblenden? ? Ich meine, ich kann es nicht in einem anderen Thread tun, weil Sie solche Dinge im UI-Thread tun müssen, richtig?Android: Fade Ansicht hinein und heraus

Ich denke, es kann mit Animationen getan werden, aber ich habe nichts gefunden, weil ich und keine Erfahrung mit Animationen hat nicht wirklich wissen, was für ...

Eigentlich zu suchen, was ich wirklich wollen, ist ein Bild in und ein anderes ausblenden, aber ich denke, der einfachste Weg ist, den ersten Bildknopf unter dem zweiten zu legen und nur den zweiten zu verblassen. Oder gibt es einen einfacheren Weg?

+0

Sie eine Animation verwenden könnten, und erstellen Sie eine Animation 'XML' Datei mit Alpha-Übergang, dann setzen es zum 'ImageButton' – kabuto178

Antwort

56

ist die Lösung, die ich jetzt bin mit, die auf API-Ebene arbeitet niedriger als 12:

AlphaAnimation anim = new AlphaAnimation(1.0f, 0.0f); 
anim.setDuration(1000); 
anim.setRepeatCount(NUM_REPEATS); 
anim.setRepeatMode(Animation.REVERSE); 
button.startAnimation(anim); 
13

Dies ist eine Animation, die wir in unserem Projekt verwendet haben. Spinner ist eine Ansicht, so dass Sie dies mit Ihrer Bildansicht ändern können. Also tatsächlich 2 Bilder übereinander, eins sichtbar unsichtbar. So haben wir es gemacht. Ich hoffe es hilft.

spinner.setVisibility(View.VISIBLE); 
    spinner.setAlpha(0); 

    spinner.animate().setDuration(200).alpha(1).setListener(new AnimatorListenerAdapter() { 
     @Override 
     public void onAnimationEnd(Animator animation) { 
      spinner.setVisibility(View.VISIBLE); 
     } 
    }); 

    infoActivityContent.animate().setDuration(200).alpha(0).setListener(new AnimatorListenerAdapter() { 
     @Override 
     public void onAnimationEnd(Animator animation) { 
      infoActivityContent.setVisibility(View.GONE); 

     mainPresenter.logout(); 
     } 
    }); 
+0

benötigt auch API Level 12 und ich brauche 8. Wie auch immer, ich werde es benutzen, bis ich etwas anderes finde. Wenn ich unendlich ein- und ausblenden möchte (was bedeutet, dass ich die Fade-In-Animation aus dem Fade-Out-Animation-End-Listener starten muss), führt das schließlich zu einem Speicherüberlauf? – DominicM

+1

Nein, das sollte normalerweise kein Problem sein. Sie laufen alle auf verschiedenen Threads, und sobald der erste beendet ist, wird der gesamte zugewiesene Speicher freigegeben. –

-1

Implementieren Sie die Animationsklasse (Sie können sie über XML laden oder dynamisch erstellen).

Dann können Sie es über API SetAnimation (Animation Animation) einstellen.

0

Sie können mehrere aufeinanderfolgende Rahmen des ersten Bildes machen in Ihre zweite Bild Morphing und zurück, dann definieren sie als animation-list und starten Sie Animation in onCreate

button_frames.xml:

<?xml version="1.0" encoding="utf-8"?> 
     <animation-list xmlns:android="http://schemas.android.com/apk/res/android" > 
     <item android:drawable="@drawable/frame1" android:duration="100" /> 
     <item android:drawable="@drawable/frame2" android:duration="100" /> 
        .... 

Layout:

<ImageView android:id="@+id/button" 
     android:background="@drawable/button_frames"/> 

OnCreate:

ImageView button= (ImageView)findViewById(R.id.button); 
    mAnimation = (AnimationDrawable) animationView.getBackground(); 
    button.postDelayed(new Runnable() { 
     public void run() { 
     mAnimation.start(); 
     } 
    }, 100); 
4

Sie müssen Crossfading Two Views von Android developers lesen. In diesem Tutorial wird erklärt, wie Sie tun können, was Sie wollen. Hier

+1

das sieht sehr gut aus, aber es benötigt API Level 12 und ich brauche Level 8 (ich habe vergessen das zu erwähnen ...) – DominicM