Problem mit Ein- und Ausblend-Animation

N

no1Ltan

Fortgeschrittenes Mitglied
7
Hallo,

ich versuche eine simple Ein- und Ausblend-Animation zu erzeugen.
Dafür arbeite ich mit dem Object Animator.
Nach Klick auf einen Button soll ein Text ein- und ausgeblendet werden (in einer TextView).

Das Problem ist, dass es entweder nur eingeblendet wird oder nur ausgeblendet.
Egal, wie ich die Werte gesetzt habe, und selbst mit der if-Abfrage (type), es klappt leider nicht, wie ich es gern hätte.

Wie müsste der Code korrekt aussehen?
Code:
public class Fragment1 extends Fragment
{
    ObjectAnimator fade; // Variable for animation (fade-out/in effect)
    TextView textViewFeedback;
    Button buttonAddText;
    @Override public void onResume()
    {
        super.onResume();
        textViewFeedback = getActivity().findViewById(R.id.text_view_feedback);
        buttonAddText = getActivity().findViewById(R.id.button_add_text);
        buttonAddText.setOnClickListener(new View.OnClickListener()
        {
            @Override
            public void onClick(View v)
            {
                feedback(textViewFeedback);
            }
        });
    }
    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState)
    {
        View fragment1 = inflater.inflate(R.layout.fragment1, container, false); // Link view and layout
        return fragment1;
    }
    public void feedback(final View view) // Visual feedback on button click
    {
        final Handler handler = new Handler();
        handler.postDelayed(new Runnable()
        {
            @Override
            public void run()
            {
                fadeEffect(view,0,3.0f, 0.0f); // Fade-Out
                ((TextView)view).setText(""); // Remove +1 after 500 ms
            }
        }, 1500); // 900 ms delay
        fadeEffect(view, 1,0.0f, 3.0f); // Fade-In
        ((TextView)view).setText("Hello!"); // Add Hello for 1500 ms
    }
    public void fadeEffect(View side, int type, float f1, float f2) // Receive specific position and float values (from to)
    {
        if (type == 0) // Fade-In
        {
            fade = ObjectAnimator.ofFloat(side, View.ALPHA, f1, f2); // Either fade-In or fade-out
        }
        else // Fade-Out
        {
            fade = ObjectAnimator.ofFloat(side, View.ALPHA, f2, f1); // Either fade-In or fade-out
        }
        fade.setDuration(400); // 400 ms animation duration
        fade.start(); // Start animation!
    }
}

Danke für jede Hilfe!
 
Hallo
Bei deiner Animation ist es eigentlich so. Das die Animation von den gesetzten ausgangs werten zu den x und y Position erfolgt.
Gesetzte werte sind normalerweise die im Layout (XML).
Das tauschen der x und y wette bringt dir da nichts wenn du wieder zum anfangswert zurück willst.
 
  • Danke
Reaktionen: no1Ltan
Warum machst du 3.0f? Bei View.ALPHA sollten die Werte afaik zwischen 0 und 1 liegen.
 
  • Danke
Reaktionen: no1Ltan und jogimuc
Danke, ich habe es vorerst so gemacht, dass die Objekte (vermutlich) nur ausgeblendet werden.
Das ist ok, da das Auge eh nicht so schnell ist, um eine Einblend-Animation zu erkennen.
Eine Ausblend-Animation hingegen erkennt man wesentlich besser (bei mir zumindest).

Ja das mit dem 3.0f war ein sinnloser Test.
Danke für den Hinweis, dass es nur von 0f bis 1f geht!

Viele Grüße
 

Ähnliche Themen

W
  • WuDiDong
Antworten
3
Aufrufe
755
jogimuc
J
S
Antworten
4
Aufrufe
955
Sempervivum
S
wernho
Antworten
11
Aufrufe
599
wernho
wernho
Zurück
Oben Unten