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

Sound solange wieder geben solange Button gedrückt wird

Dieses Thema im Forum "Android App Entwicklung" wurde erstellt von naruto25, 21.05.2012.

  1. naruto25, 21.05.2012 #1
    naruto25

    naruto25 Threadstarter Android-Hilfe.de Mitglied

    Beiträge:
    46
    Erhaltene Danke:
    0
    Registriert seit:
    17.02.2012
    Nabend leute,

    habe folgende frage, ich habe einen imagebutton. wenn ich auf den button klicke soll ein sound abgespielt werden.

    das bekomme ich auch hin mit dem code:

    Code:
    
    SoundPool sp;
    ....
    
            final int bum;
            sp = new SoundPool(5, AudioManager.STREAM_MUSIC, 0);
            
    ....
    imagebutton.setImageResource(R.drawable.ingrammac);
                    bum = sp.load(this, R.raw.mac10, 1);
                    
                    imagebutton.setOnClickListener(new OnClickListener() {
                         
                        @Override
                        public void onClick(View arg0) {
                        sp.play(bum, 1, 1, 0, 0, 1);
                        }
                    });
    
    ich möchte das aber so haben, dass wenn ich den button gedrückt halte, die sounds so lange wiedergegeben werden bis man den button loslässt. beim image handelt es sich um ein waffe. beim gedrückt halten soll also dauerfeuer ausgelöst werden.

    ich habe das auch mit der onTouch() methode versucht. hier der code:

    Code:
    
    imagebutton.setImageResource(R.drawable.schmidtmp);
                    bum = sp.load(this, R.raw.tmp, 1);
                    
                    imagebutton.setOnTouchListener(new OnTouchListener() {
                         
                        @Override
                        public boolean onTouch(View v, MotionEvent event) {
                        
                            if(event.getAction() == MotionEvent.ACTION_UP ||    event.getAction() == MotionEvent.ACTION_MOVE) {
    
                            sp.play(bum, 1, 1, 0, 0, 1);
                            
                            }
                            return true;
                        }
    });
    
    das funktioniert auch wenn ich gedrückt halte und dabei mein finger um den button bewege. aber nicht wenn ich auf einen punkt gedrückt halte. das bekomme ich irgendwie nicht hin. habe das mit dem setOnLongClickListener versucht, da hat er mir eine fehlermeldung gegeben. :(
    ich weiss also nicht mehr weiter und bitte um eure ratschläge. ich bedanke mich im voraus. :winki:

    schöne grüße
     
  2. Lightning2010, 21.05.2012 #2
    Lightning2010

    Lightning2010 Junior Mitglied

    Beiträge:
    40
    Erhaltene Danke:
    8
    Registriert seit:
    30.10.2011
    wenn du bei ACTION_DOWN anfängst zuspielen und bei ACTION_UP aufhörst sollte es genau den gewünschten Effekt haben

    Gruß
    -Lightning2010
     
  3. naruto25, 21.05.2012 #3
    naruto25

    naruto25 Threadstarter Android-Hilfe.de Mitglied

    Beiträge:
    46
    Erhaltene Danke:
    0
    Registriert seit:
    17.02.2012
    Hallo Lightning2010,

    danke für deine Antwort. Ich habe es so versucht wie du es gesagt hast, aber irgendwie bekomme ich das nicht hin. habe das mit if-else bzw. mit do-while schleife versucht. wenn ich einmal drauf klicke dann entsteht eine endlosschleife :huh:
     
  4. naruto25, 22.05.2012 #4
    naruto25

    naruto25 Threadstarter Android-Hilfe.de Mitglied

    Beiträge:
    46
    Erhaltene Danke:
    0
    Registriert seit:
    17.02.2012
    habe das nun mit folgendem code versucht, klappt leider immernoch nicht.

    Code:
    @Override
                        public boolean onTouch(View v, MotionEvent event) {
                                                
                            switch(event.getAction()){
                            
                            case MotionEvent.ACTION_DOWN:
                            {
                                sp.setLoop(bum, 1);
                                sp.play(bum, 1, 1, 0, 0, 1);
                            }
                            break;
                            
                            case MotionEvent.ACTION_UP:
                            {
                                sp.pause(bum);
                            }
                            }
                            
                            return true;
                        }
    
    wenn ich drücke und gedrückt halte, wird nur einmal der sound wiedergegeben. kann mir denn keiner helfen? :confused:
     
  5. hsofx, 23.05.2012 #5
    hsofx

    hsofx App-Anbieter (Werbung)

    Beiträge:
    24
    Erhaltene Danke:
    3
    Registriert seit:
    23.05.2012
    Ich würd's auch mit onTouch machen. Allerdings wird die OnTouch-Funktion beim Drücken ja nur einmal ausgeführt. Egal wie lange Du auf der Taste bleibst.

    Ich würds so machen, dass beim Drücken ein Timer gestartet wird in einem Intervall, der so lange ist, wie der gewünschte Intervall der einzelnen Schüsse des Dauerfeuers. Wenn der Timer zu kurz eingestellt ist, überlagern sich die Sounds, was ja nicht gewollt ist.

    Bsp: Wenn Du einen Schuss pro Sekunde abfeuert willst, kannst du bei ACTION_DOWN den ersten Schuss absetzen und den Sound spielen. Gleich danach startest Du einen Timer der jede Sekunde abläuft. Im Timer wird dann jedesmal geprüft ob ACTION_UP bereits da war. Wenn nicht wird wieder ein Schuss ausgelöst.
     
  6. naruto25, 24.05.2012 #6
    naruto25

    naruto25 Threadstarter Android-Hilfe.de Mitglied

    Beiträge:
    46
    Erhaltene Danke:
    0
    Registriert seit:
    17.02.2012
    Hallo hsofx,

    danke für deine hilfe. du hast recht, das sich die sounds überlagen. werde es so versuchen wie du gesagt hast. thx. :thumbup:
     

Diese Seite empfehlen