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

onTouchEvent / SurfaceView fragen.

Dieses Thema im Forum "Android App Entwicklung" wurde erstellt von Shelly22, 08.06.2012.

  1. Shelly22, 08.06.2012 #1
    Shelly22

    Shelly22 Threadstarter Android-Hilfe.de Mitglied

    Beiträge:
    133
    Erhaltene Danke:
    0
    Registriert seit:
    02.06.2012
    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: 08.06.2012
  2. StefMa, 08.06.2012 #2
    StefMa

    StefMa Gewerbliches Mitglied

    Beiträge:
    2,054
    Erhaltene Danke:
    413
    Registriert seit:
    16.10.2010
    bmp.setOnTouchListener(this) :confused2:
     
    Shelly22 bedankt sich.
  3. Shelly22, 08.06.2012 #3
    Shelly22

    Shelly22 Threadstarter Android-Hilfe.de Mitglied

    Beiträge:
    133
    Erhaltene Danke:
    0
    Registriert seit:
    02.06.2012
    Höö danke für den Tipp IceClaw..Genauer wäre gut.
    Aber ich versuch mal damit bisschen zu testen.


    LG
     
  4. StefMa, 08.06.2012 #4
    StefMa

    StefMa Gewerbliches Mitglied

    Beiträge:
    2,054
    Erhaltene Danke:
    413
    Registriert seit:
    16.10.2010
    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.
    Jedesmal, wenn das bmp gedrückt wurde, wird die onTouchEvent ausgelöst.
    In der onTouchEvent kannst du dann sagen:
    Denke das sollte so klappen..
     
  5. Shelly22, 08.06.2012 #5
    Shelly22

    Shelly22 Threadstarter Android-Hilfe.de Mitglied

    Beiträge:
    133
    Erhaltene Danke:
    0
    Registriert seit:
    02.06.2012
    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
     
  6. StefMa, 08.06.2012 #6
    StefMa

    StefMa Gewerbliches Mitglied

    Beiträge:
    2,054
    Erhaltene Danke:
    413
    Registriert seit:
    16.10.2010
    onTouchEvent ist eine Methode deiner Klasse..
     
  7. Shelly22, 08.06.2012 #7
    Shelly22

    Shelly22 Threadstarter Android-Hilfe.de Mitglied

    Beiträge:
    133
    Erhaltene Danke:
    0
    Registriert seit:
    02.06.2012
    Ja sorry :D habe das falsch verstanden eben :D Ist noch früh :p
     
  8. StefMa, 08.06.2012 #8
    StefMa

    StefMa Gewerbliches Mitglied

    Beiträge:
    2,054
    Erhaltene Danke:
    413
    Registriert seit:
    16.10.2010
    Shelly22 bedankt sich.
  9. Shelly22, 08.06.2012 #9
    Shelly22

    Shelly22 Threadstarter Android-Hilfe.de Mitglied

    Beiträge:
    133
    Erhaltene Danke:
    0
    Registriert seit:
    02.06.2012
    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
     
  10. Shelly22, 19.06.2012 #10
    Shelly22

    Shelly22 Threadstarter Android-Hilfe.de Mitglied

    Beiträge:
    133
    Erhaltene Danke:
    0
    Registriert seit:
    02.06.2012
    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
     
  11. snowman2, 24.06.2012 #11
    snowman2

    snowman2 Erfahrener Benutzer

    Beiträge:
    153
    Erhaltene Danke:
    18
    Registriert seit:
    07.12.2011
    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.
     
  12. Shelly22, 24.06.2012 #12
    Shelly22

    Shelly22 Threadstarter Android-Hilfe.de Mitglied

    Beiträge:
    133
    Erhaltene Danke:
    0
    Registriert seit:
    02.06.2012
    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: 24.06.2012
  13. snowman2, 24.06.2012 #13
    snowman2

    snowman2 Erfahrener Benutzer

    Beiträge:
    153
    Erhaltene Danke:
    18
    Registriert seit:
    07.12.2011
    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. ;)
     
  14. Shelly22, 24.06.2012 #14
    Shelly22

    Shelly22 Threadstarter Android-Hilfe.de Mitglied

    Beiträge:
    133
    Erhaltene Danke:
    0
    Registriert seit:
    02.06.2012
    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
     
  15. StefMa, 24.06.2012 #15
    StefMa

    StefMa Gewerbliches Mitglied

    Beiträge:
    2,054
    Erhaltene Danke:
    413
    Registriert seit:
    16.10.2010
    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: 24.06.2012
  16. Shelly22, 24.06.2012 #16
    Shelly22

    Shelly22 Threadstarter Android-Hilfe.de Mitglied

    Beiträge:
    133
    Erhaltene Danke:
    0
    Registriert seit:
    02.06.2012
    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
     
  17. Shelly22, 25.06.2012 #17
    Shelly22

    Shelly22 Threadstarter Android-Hilfe.de Mitglied

    Beiträge:
    133
    Erhaltene Danke:
    0
    Registriert seit:
    02.06.2012
    @ 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
     
  18. StefMa, 25.06.2012 #18
    StefMa

    StefMa Gewerbliches Mitglied

    Beiträge:
    2,054
    Erhaltene Danke:
    413
    Registriert seit:
    16.10.2010
  19. Shelly22, 25.06.2012 #19
    Shelly22

    Shelly22 Threadstarter Android-Hilfe.de Mitglied

    Beiträge:
    133
    Erhaltene Danke:
    0
    Registriert seit:
    02.06.2012
    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
     
  20. StefMa, 26.06.2012 #20
    StefMa

    StefMa Gewerbliches Mitglied

    Beiträge:
    2,054
    Erhaltene Danke:
    413
    Registriert seit:
    16.10.2010
    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
     

Diese Seite empfehlen