Je souhaite animer une mise en page en touchant l'écran. Si vous touchez l'écran, les boutons de mise en page doivent être translatés hors de l'écran et de nouveau en touchant l'écran, la mise en page devrait apparaître dans l'écran à sa position d'origine.Android: traduire L'animation fonctionne pour la première fois et non la deuxième fois
Je rencontre le problème lorsque je le fais par programmation. et cela fonctionne quand je le fais par XML.
En programmation, cela fonctionne pour la première fois et ne fonctionne pas une deuxième fois. Même j'ai remarqué que si on clique sur l'écran on lit tout le code de démarrage de l'animation mais il ne s'anime pas mais après cela si on clique sur le bouton ajouté dans la mise en page, l'animation fonctionne.
Voici le code:
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.Gravity;
import android.view.MotionEvent;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.view.View.OnClickListener;
import android.view.View.OnTouchListener;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.view.animation.LayoutAnimationController;
import android.view.animation.Animation.AnimationListener;
import android.webkit.WebView;
import android.widget.Button;
import android.widget.FrameLayout;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;
import android.widget.RelativeLayout.LayoutParams;
public class BrowserDemo2 extends Activity implements AnimationListener, OnTouchListener, OnClickListener
{
WebView browser;
RelativeLayout parentLayout;
LinearLayout navigationBarOuterLinearLayout;
FrameLayout navigationBarInnerFrameLayout;
Button galleryButton;
Button creditsButton;
Button viewChangeButton;
byte animationType;
public static final byte ANIM_IN = 0;
public static final byte ANIM_OUT = 1;
boolean isNavigationBarVisible = true;
boolean isAnimationInProgress;
@Override
public void onCreate(Bundle icicle)
{
super.onCreate(icicle);
setFullscreen();
setContentView(R.layout.main);
parentLayout = (RelativeLayout) findViewById(R.id.parent);
setNavigationBarLayout();
parentLayout.addView(navigationBarOuterLinearLayout);
animationType = ANIM_OUT;
animController = new LayoutAnimationController(this, null);
}
public void setNavigationBarLayout()
{
navigationBarOuterLinearLayout = new LinearLayout(this);
LayoutParams navigationBarOuterLinearLayoutParams = new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT);
navigationBarOuterLinearLayoutParams.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM);
navigationBarOuterLinearLayout.setLayoutParams(navigationBarOuterLinearLayoutParams);
navigationBarOuterLinearLayout.setOrientation(LinearLayout.VERTICAL);
navigationBarInnerFrameLayout = new FrameLayout(this);
LayoutParams navigationBarInnerFrameLayoutParams = new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT);
navigationBarInnerFrameLayoutParams.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM);
navigationBarInnerFrameLayout.setLayoutParams(navigationBarInnerFrameLayoutParams);
navigationBarInnerFrameLayout.setBackgroundResource(R.drawable.uitabbar);
navigationBarInnerFrameLayout.setPadding(0, 5, 0, 0);
galleryButton = new Button(this);
galleryButton.setOnClickListener(this);
galleryButton.setText("Gallery");
FrameLayout.LayoutParams galleryButtonParams = new FrameLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT, Gravity.CENTER_VERTICAL | Gravity.LEFT);
galleryButton.setLayoutParams(galleryButtonParams);
creditsButton = new Button(this);
creditsButton.setOnClickListener(this);
creditsButton.setText("Credits");
FrameLayout.LayoutParams creditsButtonParams = new FrameLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT, Gravity.CENTER_VERTICAL | Gravity.CENTER_HORIZONTAL);
creditsButton.setLayoutParams(creditsButtonParams);
viewChangeButton = new Button(this);
viewChangeButton.setOnClickListener(this);
viewChangeButton.setText("Chnage View");
FrameLayout.LayoutParams viewChangeButtonParams = new FrameLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT, Gravity.CENTER_VERTICAL | Gravity.RIGHT);
viewChangeButton.setLayoutParams(viewChangeButtonParams);
navigationBarInnerFrameLayout.addView(galleryButton);
navigationBarInnerFrameLayout.addView(creditsButton);
navigationBarInnerFrameLayout.addView(viewChangeButton);
navigationBarOuterLinearLayout.addView(navigationBarInnerFrameLayout);
}
public void setFullscreen()
{
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
}
public void setAnimations()
{
switch(animationType)
{
case ANIM_IN:
{
isAnimationInProgress = true;
navigationBarOuterLinearLayout.setVisibility(View.VISIBLE);
animateLayout(R.anim.lower_navigation_bar_in, navigationBarOuterLinearLayout);
// parentLayout.requestFocus();
// parentLayout.requestFocusFromTouch();
// parentLayout.requestLayout();
break;
}
case ANIM_OUT:
{
isAnimationInProgress = true;
animateLayout(R.anim.lower_navigation_bar_out, navigationBarOuterLinearLayout);
break;
}
}
}
@Override
public boolean onTouchEvent(MotionEvent event)
{
if(event.getAction() == MotionEvent.ACTION_UP)
{
Log.v("onTouch", "in touch realease..");
setAnimations();
}
return true;
}
Animation layoutAnimation;
LayoutAnimationController animController;
public void animateLayout(int type, LinearLayout layout)
{
layoutAnimation = AnimationUtils.loadAnimation(this, type);
layoutAnimation.setAnimationListener(this);
animController.setAnimation(layoutAnimation);
layout.setLayoutAnimation(animController);
layout.startLayoutAnimation();
}
@Override
public void onAnimationEnd(Animation animation)
{
if(animationType == ANIM_OUT && isNavigationBarVisible)
{
animationType = ANIM_IN;
isNavigationBarVisible = false;
navigationBarOuterLinearLayout.setVisibility(View.INVISIBLE);
}
else
{
animationType = ANIM_OUT;
isNavigationBarVisible = true;
}
isAnimationInProgress = false;
}
@Override
public void onAnimationRepeat(Animation animation)
{
// TODO Auto-generated method stub
}
@Override
public void onAnimationStart(Animation animation)
{
// TODO Auto-generated method stub
}
@Override
public boolean onTouch(View v, MotionEvent event)
{
return false;
}
@Override
public void onClick(View v)
{
// TODO Auto-generated method stub
}
J'ai également supprimé View.GONE de mon code. Malgré cela maintenant, je change grammaticalement la hauteur de la mise en page après l'avoir rendue INVISIBLE. Et son fonctionnement bien. Merci pour l'indice :) – Aakanksha