Sound solange wieder geben solange Button gedrückt wird

N

naruto25

Neues Mitglied
0
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
 
wenn du bei ACTION_DOWN anfängst zuspielen und bei ACTION_UP aufhörst sollte es genau den gewünschten Effekt haben

Gruß
-Lightning2010
 
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:
 
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:
 
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.
 
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:
 

Ähnliche Themen

A
  • AnimaAngelo85
Antworten
1
Aufrufe
331
swa00
swa00
MES
Antworten
10
Aufrufe
810
MES
MES
M
  • MikelKatzengreis
Antworten
10
Aufrufe
204
swa00
swa00
Zurück
Oben Unten