Je souhaite ajouter une animation en mode d'affichage de texte Android de sorte que, lorsqu'un texte change, il le soit progressivement et doucement. Comme, fondu en entrée ou en sortie lorsque le texte change. Est-ce possible dans Android en utilisant des animations? Je l'ai fait jusqu'ici;
Activité principale
public class MainActivity extends AppCompatActivity {
TextView tv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button btn = (Button) findViewById(R.id.btn);
tv = (TextView)findViewById(R.id.textview);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
tv.setText(String.valueOf(Integer.valueOf((String) tv.getText()) + 1));
}
});
}
}
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:tools="http://schemas.Android.com/tools"
Android:id="@+id/activity_main"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:paddingBottom="@dimen/activity_vertical_margin"
Android:paddingLeft="@dimen/activity_horizontal_margin"
Android:paddingRight="@dimen/activity_horizontal_margin"
Android:paddingTop="@dimen/activity_vertical_margin"
Android:gravity="center_horizontal"
tools:context="com.example.namal.smoothtextchange.MainActivity">
<TextView
Android:layout_width="wrap_content"
Android:id="@+id/textview"
Android:textSize="150sp"
Android:layout_height="wrap_content"
Android:text="0" />
<Button
Android:text="Change"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_below="@+id/textview"
Android:id="@+id/btn" />
</RelativeLayout>
utiliser TextSwitcher
<TextSwitcher
Android:layout_marginTop="50dp"
Android:id="@+id/textSwitcher"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:layout_gravity="center_horizontal"/>
Tableau de chaînes à afficher dans TextSwitcher
String textToShow[] = {"Main HeadLine", "Your Message", "New In Technology"};
Vous devez définir l'animation
mSwitcher.setInAnimation(context, Android.R.anim.slide_in_left);
mSwitcher.setOutAnimation(context, Android.R.anim.slide_out_right);
L'animation est déclenchée par la méthode appelante setText (CharSequence text)
// When clicked on Button TextSwitcher will switch between texts
btnNext.setOnClickListener(new View.OnClickListener() {
public void onClick (View v) {
currentIndex++;
// If index reaches maximum reset it
if (currentIndex == messageCount) {
currentIndex = 0;
}
mSwitcher.setText(textToShow[currentIndex]);
}):
Si vous souhaitez définir du texte sans animation, appelez la méthode setCurrentText (CharSequence text) .
Si vous voulez supporter Android 4+. Découvrez le Transitions Everywhere lib. Vous pouvez réaliser toutes sortes d'animations avec une compatibilité ascendante.
Ici vous pouvez trouver quelques exemples.
Juste quelques lignes et vous êtes prêt à partir!
TransitionManager.beginDelayedTransition(transitionsContainer,
new ChangeText().setChangeBehavior(ChangeText.CHANGE_BEHAVIOR_OUT_IN));
Maintenant, tout ce que vous avez à faire est de changer le texte et toute la magie est faite pour vous.
Vous pouvez utiliser TranslateAnimation
Une animation qui contrôle la position d'un objet.
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
TranslateAnimation animObj= new TranslateAnimation(0,tv.getWidth(), 0, 0);
animObj.setDuration(2000);
tv.startAnimation(animObj);
tv.setText(String.valueOf(Integer.valueOf((String) tv.getText()) + 1));
}
});
Vous pouvez consulter les liens ci-dessous pour le cas de démonstration
ajoutez Android: animateLayoutChanges = true à la vue racine, puis dans le code derrière
call this line of code at onCreate
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
((ViewGroup) findViewById(R.id.llRoot)).getLayoutTransition()
.enableTransitionType(LayoutTransition.CHANGING);
}
Utilisez ceci dans onCreate()
, avant de changer le texte dans votre textview:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
LinearLayout parentLayout = (LinearLayout)view.findViewById(R.id.container);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
LayoutTransition layoutTransition = new LayoutTransition();
layoutTransition.enableTransitionType(LayoutTransition.CHANGING);
parentLayout.setLayoutTransition(layoutTransition);
}
......
}