1. Nimm jetzt an unserem Uhans - 3. ADVENT - Gewinnspiel teil - Alle Informationen findest Du hier!

Bei onTouch Hintergrundfarbe ändern

Dieses Thema im Forum "Android App Entwicklung" wurde erstellt von BFK, 25.03.2012.

  1. BFK, 25.03.2012 #1
    BFK

    BFK Threadstarter Erfahrener Benutzer

    Beiträge:
    160
    Erhaltene Danke:
    10
    Registriert seit:
    08.12.2010
    Hallo,
    Habe folgendes Problem..:

    Ich erstelle via Code ein View, dass als Button fungieren soll.

    Wenn der User dieses View anklickt, soll sich die HintergrundFarbe ändern.
    Das mache ich so..:

    Code:
    MyView.setOnTouchListener(new View.OnTouchListener() {
                        
                        @Override 
                        public boolean onTouch(View arg0, MotionEvent event) {
                            if(event.getAction() == MotionEvent.ACTION_DOWN )
                            {
                                MyView.setPolygonColor(COLOR_ORANGE);
                                MyView.invalidate();    
                            }
                            else if(event.getAction() == MotionEvent.ACTION_UP)
                            {
                                MyView.setPolygonColor(COLOR_BLUE);
                                MyView.invalidate();
                            }
                                return false;
                        }
                    });
    
    Das ganze funktioniert gut, nur wenn der User das View anklickt (ACTION_DOWN) und seinen Finger ausserhalb des Views bewegt (also ACTION_MOVE) und dann sein Finger vom Touchscreen wegnimmt, wird ja ACTION_UP nicht aufgerufen und so bleibt das View mit der orangenen Farbe.

    Wie kann ich den testen ob der User mit seinem Finger das View verlässt..???

    So könnte ich die Farbe auf blau wiederzurücksetzen, die auch die Anfangsfarbe ist.
     
  2. Unicate, 26.03.2012 #2
    Unicate

    Unicate Android-Experte

    Beiträge:
    473
    Erhaltene Danke:
    57
    Registriert seit:
    09.08.2010
    Was du suchst ist, wie man eigene Custom Buttons erstellt.

    Das macht man aber nicht mit dem ändern der Hintergrundfarbe. Das ist einfacher. Man erstellt 2-4 Buttons, teilt einer xml-datei mit welche der 2-4 Buttons für welchen Case stehen (normal, gedrückt usw.). und dann kann man den style jeden android button geben und er wird so aussehen und auch so reagieren.

    Schau mal hier. Ansonsten such bei Google mal nach "android custom button"
     
  3. BFK, 26.03.2012 #3
    BFK

    BFK Threadstarter Erfahrener Benutzer

    Beiträge:
    160
    Erhaltene Danke:
    10
    Registriert seit:
    08.12.2010
    Hi Unicate und danke dir für deine Antwort.

    Aber NEIN ich suche nicht wie man Custom Buttons erstellt, das weiss ich nämlich schon.
    In diesem Fall kann ich aber kein eigenen Button benutzen, da es sich um ein View handelt, dass nicht immer gleich ist. (von der grösse und von der Form und von dem darauf angezeigten Inhalt)
    Deshalb wollte ich nur kurz die Farbe des Views ändern, wenn der Nutzer draufklickt.
     
  4. Tom299, 27.03.2012 #4
    Tom299

    Tom299 Android-Experte

    Beiträge:
    602
    Erhaltene Danke:
    120
    Registriert seit:
    31.08.2011
    Bei Action_Move bekommt man doch sicherlich die Koordinaten vom Touch und wie groß deine View ist kannst du sicher auch rausfinden. Und dann zu prüfen wann der Finger den View verläßt sollte doch nicht so schwer sein, oder versteh ich jetzt was falsch?
     
  5. BFK, 27.03.2012 #5
    BFK

    BFK Threadstarter Erfahrener Benutzer

    Beiträge:
    160
    Erhaltene Danke:
    10
    Registriert seit:
    08.12.2010
    Hi,
    du hast recht.
    Bei ACTION_MOVE bekomme ich die Koordinaten und klar ich weiss wie gross mein View ist. Aber wenn ich das View mit dem Finger verlasse, dann bekomme ich keine Koordianten mehr, da ich ja die Koordinaten nur vom View selbst bekomme.
    Also ich kann zum Beispiel nicht checken ob sich ein Punkt jetzt ausserhalb des Views befindet oder innerhalb.
    Das funktioniert nur wenn ich ein extra onTouchListener erstelle, und zwar vom ganzen Display und sobald der User das View antouched, aktiviert sich auch der onTouchListener des ganzen Displays. Aber diese Lösung finde ich nicht besonders elegant.
    Es sei denn du meintest was anderes und ich habe es nicht richtig mitgekriegt...wenn dann bitte korrigieren.

    Eine andere Lösung wär dann auch einen Timer zu erstellen, der automatisch die Farbe zurücksetzt wenn ACTION_UP nicht aktiviert wurde.
    Aber diese Lösung finde ich noch schlechter als die vorrige.

    Aber eigentlich müsste doch was einfacheres geben. Ich meine ok die version per xml mit den verschiedenen states sollte doch auch programmierbar machbar sein oder etwa nicht..?
     
  6. Tom299, 27.03.2012 #6
    Tom299

    Tom299 Android-Experte

    Beiträge:
    602
    Erhaltene Danke:
    120
    Registriert seit:
    31.08.2011
    BFK bedankt sich.
  7. BFK, 27.03.2012 #7
    BFK

    BFK Threadstarter Erfahrener Benutzer

    Beiträge:
    160
    Erhaltene Danke:
    10
    Registriert seit:
    08.12.2010
    Hey danke, es war ACTION_CANCEL.

    Also mit...
    Code:
    else if(event.getAction() == MotionEvent.ACTION_CANCEL)
                            {
                                TrackView[count].setPolygonColor(COLOR_BLUE);
                                TrackView[count].invalidate();
                            }
    
    wird alles wieder zurückgesetzt.
     
  8. Tom299, 27.03.2012 #8
    Tom299

    Tom299 Android-Experte

    Beiträge:
    602
    Erhaltene Danke:
    120
    Registriert seit:
    31.08.2011
    :thumbsup:
     

Diese Seite empfehlen