Как настроить функцию повторения до нажатия кнопки? - PullRequest
0 голосов
/ 17 июня 2011

С учетом следующего кода:

package com.buttonsound;

import android.app.Activity;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.View;
import android.widget.Button;

public class buttonsound extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        final MediaPlayer mpButton=MediaPlayer.create(this,R.raw.button_click);
        Button buttonsound=(Button) findViewById(R.id.button1);
        buttonsound.setOnTouchListener(new View.OnTouchListener() {
            public boolean onTouch(View v, MotionEvent me) {
                while(me.getAction()==MotionEvent.ACTION_DOWN)
                {
                    mpButton.start();
                }
                return false;
            }
        });
    }
}

Как запустить функцию и настроить ее повторение до тех пор, пока не будет нажата кнопка, которая завершает операцию. Приведенный выше код просто повторяется даже после отпускания кнопки.

Ответы [ 3 ]

4 голосов
/ 17 июня 2011

Вы никогда не звоните stop(), конечно, он продолжит играть.Ваш цикл while вызывает start() несколько раз, вы не должны этого делать.Думайте об этом как о любом другом медиаплеере - вы не нажимаете кнопку «Воспроизведение», чтобы прослушать весь трек, он продолжается до тех пор, пока вы не скажете иначе.

Вместо этого попробуйте что-то вроде этого:

public boolean onTouch(View v, MotionEvent me) {
    switch(me.getAction()) {
        case MotionEvent.ACTION_DOWN:
            if(!mpButton.isPlaying()) mpButton.start();
            break;
        case MotionEvent.ACTION_UP:
            if(mpButton.isPlaying()) mpButton.stop();
            break;
    }
}

РЕДАКТИРОВАТЬ: В дополнение, имя MediaPlayer mpButton просто требует путаницы в будущем;просто говорю'.;)

0 голосов
/ 05 ноября 2011

если вы говорите о том, как повторить что-то в медиаплеере, просто

 mediaPlayer.seekTo(0);
 mediaPlayer.start();
0 голосов
/ 17 июня 2011

привет, вы можете сделать что-то вроде этого:

Boolean btnIsPressed = false;
Button btn = (Button) findViewById(R.id.btn);

и добавить поток, и в методе run добавьте этот код:

@Override
public void run(){
      while(!btnIsPressed){
          myfunction();
      }
}

наконец, в вашем методе onCreate,добавьте слушателя, чтобы изменить значение вашего логического значения на true следующим образом:

btn.addOnClickListener( new OnClickListener(){

   @Overrride
   public void onClick(View v){
      btnIsPressed = true;
   }
});

Надеюсь, это поможет

...