1. Mitglieder surfen ohne Werbung auf Android-Hilfe.de! ✔ Jetzt kostenlos Mitglied in unserer Community werden.
  1. no1Ltan, 25.10.2018 #1
    no1Ltan

    no1Ltan Threadstarter Android-Hilfe.de Mitglied

    Hallo,

    ich habe 2 TextViews, in denen jeweils noch 1 weitere TextView integriert ist.
    Globale Variablen:
    TextView textViewTop, textViewBottom // Clickable textViews
    TextView textViewFeedbackTop, textViewFeedbackBottom // Visual feedback

    Verlinkung der IDs in der @override public void onResume():
    textViewTop = getActivity().findViewById(R.id.text_view_top); // Link variable to ID
    textViewBottom = getActivity().findViewById(R.id.text_view_bottom); // Link variable to ID
    textViewFeedbackTop = getActivity().findViewById(R.id.text_view_feedback_top); // Link variable to ID
    textViewFeedbackBottom = getActivity().findViewById(R.id.text_view_feedback_bottom); // Link variable to ID


    Wenn ich auf eine der beiden TextViews klicke, möchte ich einen Klick-Effekt haben.
    Effekt 1: Die Textview soll sich kurzzeitig bewegen
    Effekt 2: Es soll ein kurzzeitig ein Symbol erscheinen.

    Die Effekte habe ich dank des ObjectAnimators, der mir von deek empfohlen wurde, umgesetzt.

    Beim Aufrufen der Methoden (im OnClickListener der TextViews), sende ich den Namen der aktuellen TextView an die Methoden.
    Das heißt, die Methoden wissen, welche View sie mit dem Effekt versorgen sollen.

    Alles funktioniert super... bis auf eine Sache:
    In der Feedback-Methode akzeptiert Java nicht die p.setText(""); bzw. p.setText("+");
    ("Cannot resolve method 'setText(java.lang.String)'")
    Es funktioniert nur, wenn da der tatsächliche View-Name steht, also z.B.:
    textViewTop.setText(""); textViewTop.setText("+");

    Bei allen anderen Methoden gibt es keine Probleme wenn ich statt textViewTop bzw. textViewBottom einfach das p verwende.
    Das p steht ja für den TextView-Namen.

    Ich hatte dann versucht, mit if-Abfragen zu arbeiten, aber das war dann sogar noch schlechter (und funktionierte ebenfalls nicht).

    Hier der Code (ohne if-Abfragen):
    Code:
            textViewTop.setOnClickListener(new View.OnClickListener()
            {
                @Override public void onClick(View v)
                {
                    feedback(textViewTop); // Show + icon
                    moveEffect(textViewTop); // Start moving animation
                }
            });
            textViewBottom.setOnClickListener(new View.OnClickListener()
            {
                @Override public void onClick(View v)
                {               
                    feedback(textViewBottom); // Show + icon
                    moveEffect(textViewBottom); // Start moving animation
                }
            });
    
        public void feedback(final View p) // Visual feedback (for specific view object)
        {
            final Handler handler = new Handler();
            handler.postDelayed(new Runnable()
            {
                @Override
                public void run()
                {
                    fadeEffect(p, 1.0f, 0.0f); // Fade-Out
                    p.setText(""); // Remove +1 after 500 ms -> DOES NOT WORK!
                }
            }, 500); // 500 ms delay
            fadeEffect(p, 0.0f, 1.0f); // Fade-In
            p.setText("+"); // Add + character for 500 ms -> DOES NOT WORK!
        }
        public void moveEffect(View p) // Receive view - specific position
        {
            move = ObjectAnimator.ofFloat(p, "translationX", 20f, 0f); // Move view 20px to right, then back to 0
            move.setDuration(100); // 100 ms animation duration
            move.setRepeatCount(1); // Repeat animation 1 time
            move.start(); // Start animation!
        }
        public void fadeEffect(View p, float f1, float f2) // Receive view - specifiv position and float values (from f1 to f2)
        {
            fade = ObjectAnimator.ofFloat(p, View.ALPHA, f1, f2); // Either fade-In or fade-out
            fade.setDuration(300); // 300 ms animation duration
            fade.start(); // Start animation!
        }
    
    Achso eine Kleinigkeit noch:
    Kann ich z.B. statt feedback(textViewTop); auch sowas wie feedback(this); machen?
    Praktisch, "Starte die Methode und schicke deinen eigenen Namen".
    this funktioniert nicht, aber vielleicht gibt es ja eine andere Möglichkeit.

    Danke für jede Hilfe!
     
  2. MeinFake, 25.10.2018 #2
    MeinFake

    MeinFake Neuer Benutzer

    p ist eine View. Die Funktion .setText("") ist nur bei TextViews vorhanden. Deshalb funktioniert textViewTop.setText("") nur mit textViewTop und nicht mit p.

    So klappt es:
    Code:
    ((TextView) p).setText("");
     
    no1Ltan bedankt sich.
  3. no1Ltan, 25.10.2018 #3
    no1Ltan

    no1Ltan Threadstarter Android-Hilfe.de Mitglied

    Ach man, so knapp!
    Auf die Idee mit dem Casting bin ich auch schon gekommen.
    Ich hatte es allerdings mit (TextView)p.setText("+"); probiert, was nicht geklappt hat.
    Das ärgert mich jetzt schon etwas...

    Es funktioniert nun und dafür danke ich dir vielmals!

    Beste Grüße
     
Die Seite wird geladen...
Ähnliche Themen Forum Datum
MIT AppInventor App erstellen um PDFs zu öffnen, problem Android App Entwicklung 10.10.2018
Problem mit for-Schleife, delay und Margins Android App Entwicklung 08.10.2018
TextView wert übergeben Android App Entwicklung 28.06.2018
custom textView .setText() - UI thread Android App Entwicklung 02.04.2018
Fragment Textview Text von non-Activity ändern Android App Entwicklung 27.01.2018
Problem mit startActivityForResult() Android App Entwicklung 25.01.2018
Problem beim Geofencing in einer Android App Android App Entwicklung 24.11.2017
Du betrachtest das Thema "Problem mit variable.setText (für TextView)" im Forum "Android App Entwicklung",
  1. Android-Hilfe.de verwendet Cookies um Inhalte zu personalisieren und dir den bestmöglichen Service zu gewährleisten. Wenn du auf der Seite weitersurfst stimmst du der Cookie-Nutzung zu.  Ich stimme zu.