onTouchEvent / SurfaceView fragen.

S

Shelly22

Fortgeschrittenes Mitglied
0
Hallo.
Mache mich gerade bisschen mit onTouchEvent und SurfaceView vertraut.

Habe mir ein selbsgemachten Button also .bmp datei gemacht
Sehen tue ich ihn auch in meiner Anwendung/App.

Aber wie mache ich das nun wenn ich nur den Button.bmp anklicke das dann was passiert? Z.B als Test System.exit(0);

Habe das bis jetzt nur so hinbekommen für den ganzen Bildschirm.

public boolean onTouchEvent(MotionEvent event) {
if(event.getAction() == MotionEvent.ACTION_DOWN){
System.exit(0);

}
return super.onTouchEvent(event);
}


Mein Button.bmp ist so angelegt:
bmp = BitmapFactory.decodeResource(getResources(), R.drawable.ButtonPic);


LG
 
Zuletzt bearbeitet:
bmp.setOnTouchListener(this) :confused2:
 
  • Danke
Reaktionen: Shelly22
Höö danke für den Tipp IceClaw..Genauer wäre gut.
Aber ich versuch mal damit bisschen zu testen.


LG
 
Du hast in deinem onCreate dein BitMap erzeugt.
In der Klasse hast du eine Methode onTouchEvent.

In der onCreate musst du dem TouchEvent sagen, dass es auf den bmp hören soll.
bmp.setOnTouchListener(this)

Jedesmal, wenn das bmp gedrückt wurde, wird die onTouchEvent ausgelöst.
In der onTouchEvent kannst du dann sagen:
if(event.id == R.id.idDerBmp)
{
// ToDo
}

Denke das sollte so klappen..
 
Danke dir. Werde es gleich Testen.
Aber in der onCreate Klasse ist nicht die Methode onTouchEvent.
Sondern in einer anderen. Muss ich das also auch noch umgestalten *grins*

LG
 
onTouchEvent ist eine Methode deiner Klasse..
 
Ja sorry :D habe das falsch verstanden eben :D Ist noch früh :p
 
LOL Guten Morgen :D :D :D

Ok mache ich :D


LG

Der ursprüngliche Beitrag von 09:06 Uhr wurde um 09:19 Uhr ergänzt:

Ok es geht. Nur das doofe daran ist. Man muss mit Koordinaten Arbeiten.
Aber nun gehts und habe es soweit verstanden.

Danke dir nochmal.

LG
 
Hallo alle zusammen.

So ganz verstehe ich das noch nicht mit dem onTouchEvent:

public boolean onTouchEvent(final MotionEvent event) {

switch (event.getAction()) {

case MotionEvent.ACTION_DOWN: {
float posX = event.getX();
float posY = event.getY();
float x1 = 20, x2 = 100, y1 = 20, y2 = 100;

if ((posX >= x1 && posX <= x2) && (posY >= y1 && posY <= y2)) {

System.exit(0);

} else {
}
break;
}
}
return super.onTouchEvent(event);
}

Wenn ich jetzt ganz Links Oben auf dem Screen klicke dann passiert das was ich angegeben habe.

Aber ich verstehe nicht wie ich meine Position da verändert kann.
Z.B ist mein Button weiter unten in der mitte.
x= 60 und y= 100

Nur einfach in der Methode was ändern bringt nichts.
Kann mir da einer weiter helfen?


LG
 
Ich denke, dein Ansatz ist falsch. "onTouchEvent" nutzt man, wenn man die Touchposition auf dem Bildschirm benötigt. Das ist also eher was für Wischereignisse oder Fullscreen Spiele.

Wenn ich dich richtig verstanden habe möchtest du aber auf einen "click" auf deine Grafik reagieren. Schau dir dazu mal "onClickListener" oder "onTouchListener" an. In diesen Listenern wird dir das View übergeben, auf das du gedrückt hast. Es gibt dabei auch zwei Möglichkeiten deiner Grafik den TouchListener zuzuweisen.

hier mal ein ganz kurzer Pseudocode:

Code:
public void onCreate(){
   deinBMP.setOnTouchListener(this);
}

public boolean onTouch(View v, MotionEvent event) {
  if (v = deinBMP) {
    //Mach was
  }
  return false;
}

oder

Code:
public void onCreate(){
   deinBMP.setOnTouchListener(new OnTouchListener() {
            public boolean onTouch(View v, MotionEvent event) {
                // Mach was auch immer du magst.
                return false;
            }
        });
}

Bei der ersten Möglichkeit wird on Touch immer aufgerufen, egal welches Widget du berüherst und bei der zweiten Variante wird onTouch nur aufgerufen wenn du deinBMP berüherst.
 
Hallo und danke dir =)

Wow danke dir =) Danke dir sehr.

Aber habe auch noch was tolles gefunden und das klappt super.
Was sagst du dazu?

Code:
public boolean onTouchEvent(MotionEvent event) {

        switch (event.getAction()) {

        case MotionEvent.ACTION_DOWN: {

            if ((x = (int) event.getX() - bmp.getWidth()) == (y = (int) event
                    .getY() - bmp.getHeight())) {

            } else {

            }
            break;
        }
        }
        return super.onTouchEvent(event);
    }
x und y sind die Cords von mein bmp Image



EDIT: Bei deiner zweiten Methode gibt er mir leider ein fehler bei setOnTouchListener.




LG
 
Zuletzt bearbeitet:
Shelly22 schrieb:
EDIT: Bei deiner zweiten Methode gibt er mir leider ein fehler bei setOnTouchListener.

Was denn für eine Fehlermeldung? Ich habe den Pseudocode ja nur schnell hingeschrieben ohne ihn zu prüfen. Sollte ja nur die Grundlagen verdeutlichen.
Ich dachte "event.getX()" kanntest du schon. Was ich dir nicht sagen kann ob dies auf allen Displays bei allen Auflösungen funktioniert. Ich glaube aber es sollte funktionieren. ;)
 
Naja event.getX() kenne ich nun schon :D aber noch nicht ganz was man damit alles machen kann =P oder wie ich das sagen soll :D

Alles ist richtig außer bei " bmp.setOnTouchListener " ist setOnTouchListener rot unterstrichen. bmp ist meine bmp.

Er sagt dazu : The methode setOnTouchListener(new OnTouchListener(){}) is undefined for the type Bitmap.


LG
 
Bitmap ist kein view!
Habe ich dir oben auch schon geschrieben.
Deshalb kann der TouchListener nicht funktionieren!

Edit:
TouchDown musst du nicht benutzen. Man benutzt es nur, damit der klick nur einmal registriert wird. Ansonsten wird beim wischen auch jedesmal der Liste ausgelöst
Habe zZ ein ähnliches Projekt laufen. Code schnipsel kann ich dir morgen abend liefern...

Gesendet von meinem Galaxy Nexus mit der Android-Hilfe.de App
 
Zuletzt bearbeitet:
Ich kann nicht alles wissen =P Nur lernen :D Aber danke dir für die Info :D
Meine Version Funkt ja :D Er wollte mir nur helfen :D

Ok das würde mich freuen.


LG
 
@ Snowman2:

Und das hier:
Code:
public boolean onTouchEvent(final MotionEvent event) {
 
        switch (event.getAction()) {
 
        case MotionEvent.ACTION_DOWN: {
            float posX = event.getX();
            float posY = event.getY();
            float x1 = 20, x2 = 100, y1 = 20, y2 = 100;
 
            if ((posX >= x1 && posX <= x2) && (posY >= y1 && posY <= y2)) {
 
                System.exit(0);
 
            } else {
            }
            break;
        }
    }
        return super.onTouchEvent(event);
}
ist sehr gut dafür, wenn du z.B ein riesen BMP oder sonstiges hast und festlegen möchtest wo man auf den Bild oder sonstiges klicken soll und dann erst was passiert.

float x1 = 20, x2 = 100, y1 = 20, y2 = 100 = 80x80 Pixel breite usw.
So kannst du die breite und wo es liegt festlegen.

Bei

Code:
public boolean onTouchEvent(MotionEvent event) {

        switch (event.getAction()) {

        case MotionEvent.ACTION_DOWN: {

            if ((x = (int) event.getX() - bmp.getWidth()) == (y = (int) event
                    .getY() - bmp.getHeight())) {

            } else {

            }
            break;
        }
        }
        return super.onTouchEvent(event);
    }

ist doof das immer unten rechts an der ecke des Bildes oder sonstiges klicken muss damit es reagiert.


LG
 
Ich danke dir. Aber irgendwie klappt garnichts davon.
Überall fehler und und und. Kein plan warum. Egal wie ich das
einfüge oder kopiere :D.
Hoffe ja du hast das in Eclipse bearbeitet :D.


LG
 
Das ist mein code. Mit ecllipse gearbeitet.
Bei mir geht es.
Entsprechende drawables musst du natürlich erstellen..

Gesendet von meinem cm_tenderloin mit der Android-Hilfe.de App
 

Ähnliche Themen

M
Antworten
2
Aufrufe
626
Mozart40
M
A
Antworten
1
Aufrufe
582
swa00
swa00
SpeedySix
Antworten
13
Aufrufe
1.398
jogimuc
J
Zurück
Oben Unten