2016-08-15 4 views
0

Ich habe lineare Layouts, die ich auf Klick ersetzen möchte. Am Anfang: Lineares Layout A ist sichtbar, Lineares Layout B ist verschwunden Ich will, wenn A geklickt wird, um weg zu sein und B, um sichtbar zu sein und umgekehrt. ohne die Animation es alles funktioniert gut, aber wenn ich Animation nach dem Klicken auf BB ist gegangen, aber A ist nicht sichtbar, obwohl, wenn ich an seiner Stelle das Protokoll gibt mir, dass es sichtbar ist hier ist der Code, jede Hilfe wäre willkommenProbleme mit Ansichten und Animationen

private void switchRowItems(final LinearLayout toBeHiddenRow,final LinearLayout toBeShownRow){ 
    toBeHiddenRow.animate() 
      .rotation(toBeHiddenRow.getHeight()/2) 
      .alpha(0.0f) 
      .setDuration(300) 
      .setListener(new AnimatorListenerAdapter() { 
       @Override 
       public void onAnimationEnd(Animator animation) { 
        super.onAnimationEnd(animation); 
        toBeHiddenRow.clearAnimation(); 
        toBeHiddenRow.setVisibility(View.GONE); 
        toBeShownRow.clearAnimation(); 
        toBeShownRow.setVisibility(View.VISIBLE); 
       } 
      }); 
    //toBeShownRow.clearAnimation(); 
    // toBeShownRow.setVisibility(View.VISIBLE); 

} 

und die auf Klick-Checker ist so einfach wie:

if (llRowTwoItemOne.getVisibility() == View.VISIBLE) { 
     Log.d("llRowTwoItemOne","visible"); 
    } else { 
     Log.d("llRowTwoItemOne","not visible"); 
    } 

Antwort

0

ich es auf diese Weise tun:

  1. in res/anim re erstellen von xML-Datei Quellverzeichnis Sagen wir es myanimation.xml nennen und schreiben dort:
<set xmlns:android="http://schemas.android.com/apk/res/android"> 


<rotate 
     android:fromDegrees="0" 
     android:toDegrees="360" 
     android:duration="300"> 
    </rotate> 

    <alpha 
     android:fromAlpha="1.0" 
     android:toAlpha="0.0" 
     android:duration="200"> 
    </alpha> 
</set> 

Sie können sehen, dass es eine Reihe von Animationen, die Sie benötigen: Rotation und Alpha.

  1. Dann schreibe ich in der switchRowItem Funktion dieser:

    private void switchRowItems(final LinearLayout toBeHiddenRow, final LinearLayout toBeShownRow){ 
    
    Animation anim = AnimationUtils.loadAnimation(this, R.anim.myanimation); 
    anim.setAnimationListener(new Animation.AnimationListener() { 
        @Override 
        public void onAnimationStart(Animation animation) { 
    
        } 
    
        @Override 
        public void onAnimationEnd(Animation animation) { 
    
         toBeHiddenRow.setVisibility(View.GONE); 
         toBeShownRow.setVisibility(View.VISIBLE); 
        } 
    
        @Override 
        public void onAnimationRepeat(Animation animation) { 
        } 
    }); 
    toBeHiddenRow.startAnimation(anim); 
    
    } 
    

Das ist alles. Es funktioniert ziemlich gut. Hoffe, das ist, was Sie gefragt haben.

+0

DANKE ALOT IT WORKED aber wie stelle ich die Rotation llRow.getHeight()/2 ?? –

+0

@eshteghelcompany, Sie sind willkommen. Ich weiß das nicht genau. Wenn nur eine Animation gedreht würde, könnten Sie einfach die RotateAnimation-Klasse für diesen Zweck verwenden. Aber Sie haben eine Reihe von Animationen. Das macht die Dinge kompliziert. Vielleicht ist es eine Frage für einen anderen Beitrag? =) –

+1

löste es. PivotX und PivotY = 50% –

Verwandte Themen