web-dev-qa-db-fra.com

Changement de texte en douceur dans l'animation Android

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>
7
Humty

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) .

10
Gazi Rimon

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.

4
Andrej Jurkin

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

  1. Exemple d'animation Android
  2. Android Utilisation d'animations XML
2
IntelliJ Amiya

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);
   }
2
Muhammad Hassaan

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);
        }    
        ......    
    }
0
Deven