Bei onTouch Hintergrundfarbe ändern

B

BFK

Fortgeschrittenes Mitglied
11
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.
 
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"
 
Unicate schrieb:
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"

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.
 
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?
 
Tom299 schrieb:
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?

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..?
 
Tom299 schrieb:
Schau dir mal die ACTIONS an MotionEvent | Android Developers vielleicht ist ACTION_OUTSIDE ja das gesuchte? Oder ACTION_CANCEL?

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.
 
:thumbsup:
 

Ähnliche Themen

D
Antworten
17
Aufrufe
321
datNeMo
D
D
Antworten
14
Aufrufe
1.648
chrs267
chrs267
C
  • Chicken Wing
Antworten
4
Aufrufe
822
Chicken Wing
C
Zurück
Oben Unten