Visualizzazioni Android espandere l'animation

Sto cercando di modificare questa sorgente per creare una semplice function che funziona su tutti i miei punti di vista.

@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); RelativeLayout mLayout1 = (RelativeLayout) findViewById(R.id.layout1); RelativeLayout mLayoutToBeExpanded1 = (RelativeLayout) findViewById(R.id.layout_exp_1); addAction(mLayout, mLayoutToBeExpanded); RelativeLayout mLayout2 = (RelativeLayout) findViewById(R.id.layout2); RelativeLayout mLayoutToBeExpanded2 = (RelativeLayout) findViewById(R.id.layout_exp_2); addAction(mLayout2, mLayoutToBeExpanded2); RelativeLayout mLayout3 = (RelativeLayout) findViewById(R.id.layout3); RelativeLayout mLayoutToBeExpanded3 = (RelativeLayout) findViewById(R.id.layout_exp_3); addAction(mLayout3, mLayoutToBeExpanded3); } public void addAction(final View layout, final View summary) { summary.getViewTreeObserver().addOnPreDrawListener( new ViewTreeObserver.OnPreDrawListener() { @Override public boolean onPreDraw() { summary.getViewTreeObserver().removeOnPreDrawListener(this); summary.setVisibility(View.GONE); final int widthSpec = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED); final int heightSpec = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED); summary.measure(widthSpec, heightSpec); mAnimator = slideAnimator(0, summary.getMeasuredHeight(), summary); return true; } }); layout.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (summary.getVisibility() == View.GONE) { expand(summary); } else { collapse(summary); } } }); } private void expand(View summary) { //set Visible summary.setVisibility(View.VISIBLE); /* Remove and used in preDrawListener final int widthSpec = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED); final int heightSpec = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED); mLinearLayout.measure(widthSpec, heightSpec); mAnimator = slideAnimator(0, mLinearLayout.getMeasuredHeight()); */ mAnimator.start(); } private void collapse(final View summary) { int finalHeight = summary.getHeight(); ValueAnimator mAnimator = slideAnimator(finalHeight, 0, summary); mAnimator.addListener(new Animator.AnimatorListener() { @Override public void onAnimationEnd(Animator animator) { //Height=0, but it set visibility to GONE summary.setVisibility(View.GONE); } @Override public void onAnimationStart(Animator animator) { } @Override public void onAnimationCancel(Animator animator) { } @Override public void onAnimationRepeat(Animator animator) { } }); mAnimator.start(); } private ValueAnimator slideAnimator(int start, int end, final View summary) { ValueAnimator animator = ValueAnimator.ofInt(start, end); animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { @Override public void onAnimationUpdate(ValueAnimator valueAnimator) { //Update Height int value = (Integer) valueAnimator.getAnimatedValue(); ViewGroup.LayoutParams layoutParams = summary.getLayoutParams(); layoutParams.height = value; summary.setLayoutParams(layoutParams); } }); return animator; } 

Il problema: i primi 2 layout lavorano una sola volta. Dopo il primo espansione -> cede l'onClickFunction non funziona. il terzo layout funziona bene, posso espandere / comprimere più volte. Qualsiasi soluzione?

  • Produzione di effetti cancelleria usando libgdx e OpenGL ES
  • Errore di trasmissione dati tramite SPP over Bluetooth su Android
  • AuthenticatorException: errore di collegamento su AVD
  • Android HTTP avanza il caricamento per UrlEncodedFormEntity
  • android-Come eseguire il servizio in thread diversi rispetto al thread principale?
  • Android - Google Spreadsheet Api
  • get i registri delle chiamate delle chiamate in entrata e in output in android in modo programmato
  • AdMob non può visualizzare gli annunci a causa di configChanges
  • Android Due rotazioni di dito
  • Android: separatore personalizzato (o anche elemento) in ListView depening sul contenuto dell'elemento
  • Come determinare se la mia applicazione è in esecuzione su Android
  • Android Spinner utilizzando ArrayList <String>
  • 4 Solutions collect form web for “Visualizzazioni Android espandere l'animation”

    Ho risolto da me così, ecco la soluzione di lavoro per un layout espandibile.

    Uso:

     addAction(YourLayout, LayoutToBeExpanded) 

    Funzione:

      public void addAction(final View layout, final View summary) { layout.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (summary.getVisibility() == View.GONE) { expand(summary); } else { collapse(summary); } } }); } private void expand(View summary) { //set Visible summary.setVisibility(View.VISIBLE); final int widthSpec = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED); summary.measure(widthSpec, 300); mAnimator = slideAnimator(0, 300, summary); mAnimator.start(); } private void collapse(final View summary) { int finalHeight = summary.getHeight(); ValueAnimator mAnimator = slideAnimator(finalHeight, 0, summary); mAnimator.addListener(new Animator.AnimatorListener() { @Override public void onAnimationEnd(Animator animator) { //Height=0, but it set visibility to GONE summary.setVisibility(View.GONE); } @Override public void onAnimationStart(Animator animator) { } @Override public void onAnimationCancel(Animator animator) { } @Override public void onAnimationRepeat(Animator animator) { } }); mAnimator.start(); } private ValueAnimator slideAnimator(int start, int end, final View summary) { ValueAnimator animator = ValueAnimator.ofInt(start, end); animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { @Override public void onAnimationUpdate(ValueAnimator valueAnimator) { //Update Height int value = (Integer) valueAnimator.getAnimatedValue(); ViewGroup.LayoutParams layoutParams = summary.getLayoutParams(); layoutParams.height = value; summary.setLayoutParams(layoutParams); } }); return animator; } 

    Se vuoi anche crollare il "mLayoutToBeExpanded" su self click utilizza questo:

      public void addAction(final View layout, final View summary) { layout.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (summary.getVisibility() == View.GONE) { expand(summary); } else { collapse(summary); } } }); summary.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { if (summary.getVisibility() == View.VISIBLE) { collapse(summary); } else { //nothing } } }); } 

    Utilizzare questo metodo per get il crollo e espandere l'animation:

      public void expandOrCollapse(final View v,String exp_or_colpse) { TranslateAnimation anim = null; if(exp_or_colpse.equals("expand")) { anim = new TranslateAnimation(0.0f, 0.0f, -v.getHeight(), 0.0f); v.setVisibility(View.VISIBLE); } else{ anim = new TranslateAnimation(0.0f, 0.0f, 0.0f, -v.getHeight()); AnimationListener collapselistener= new AnimationListener() { @Override public void onAnimationStart(Animation animation) { } @Override public void onAnimationRepeat(Animation animation) { } @Override public void onAnimationEnd(Animation animation) { v.setVisibility(View.GONE); } }; anim.setAnimationListener(collapselistener); } // To Collapse // anim.setDuration(300); anim.setInterpolator(new AccelerateInterpolator(0.5f)); v.startAnimation(anim); } 

    E call questo metodo nel tuo codice:

      //For Expand View expandOrCollapse(YourView,"expand"); //For Collapse View expandOrCollapse(yourView,"collapse"); 
      ValueAnimator expandAnimation = ValueAnimator.ofInt(mainView.getHeight(), 400); expandAnimation.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { @Override public void onAnimationUpdate(final ValueAnimator animation) { int height = (Integer) animation.getAnimatedValue(); RelativeLayout.LayoutParams lp = (LayoutParams) mainView.getLayoutParams(); lp.height = height; } }); expandAnimation.setDuration(500); expandAnimation.start(); 

    Solo un'alternativa, facile da usare. Per espandere la visualizzazione con l'animation:

     view.setPivotY(0); ObjectAnimator.ofFloat(view, "scaleY", 0f, 1f).setDuration(300).start(); 
    L'Android è un fan Android di Google, tutto su telefoni Android, Android Wear, Android Dev e applicazioni Android Games e così via.