Fireplace

Java [ANDROID] Sound wiedergeben solange imageButton gedrückt wird

Ken Masters

Lt. Junior Grade
Registriert
Dez. 2006
Beiträge
334
Einen schönen guten morgen an alle,

habe folgende frage, und zwar bin ich dabei eine android app zu programmieren. 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. auch habe ich es mit if-else bzw. mit do-while schleife versucht. ich weiss also nicht mehr weiter und bitte um eure ratschläge. ich bedanke mich im voraus.

schöne grüße ;)
 
Wie wäre es, wenn du noch das MotionEvent.ACTION_DOWN hinzufügst, denn das sollte ja auch dann auslösen, wenn du den Button hälst.
MotionEvent.ACTION_UP alleine z.B. würde ja nur dann auslösen, wenn du loslässt nachdem du draufgedrückt oder gehalten hast.

Alle drei Events abzufragen wird denke ich der richtige Weg sein, denn du willst den Sound ja abspielen, wenn gedrückt wurde (ACTION_UP), wenn der User den Finger bewegt(ACTION_MOVED) und, und das ist der Punkt, solange der User den Finger einfach nur draufhält(ACTION_DOWN).

Bin zwar nicht ganz drin, aber ich stelle es mir so vor.
 
Hi DaysShadow,

danke für deine Antwort. Hast im Prinzip recht. am anfang hatte ich es auch mit ACTION_DOWN. habe nun es mit allen drei probiert, aber es geht nicht, oder ich bekomme es nicht hin.

habe das so geschrieben:

Code:
imagebutton.setOnTouchListener(new OnTouchListener() {
					 
					@Override
					public boolean onTouch(View v, MotionEvent event) {
											
						if(event.getAction() == MotionEvent.ACTION_DOWN){

						sp.play(bum, 1, 1, 0, 0, 1);
						}
						
						else if(event.getAction() == MotionEvent.ACTION_MOVE) {
							sp.play(bum, 1, 1, 0, 0, 1);
						}
						
						else if (event.getAction() == MotionEvent.ACTION_UP) {
							sp.stop(bum);
						}

						return true;
					}
 
Zurück
Oben