Как сделать звук постоянно зацикленным, когда кнопка нажата и остановлена ​​при отпускании? - PullRequest
0 голосов
/ 26 августа 2010

Мой вопрос очень простой, я уверен.Просто я не совсем уверен, как эффективно описать то, что я пытаюсь достичь.

В любом случае, у меня есть простая кнопка, я знаю, как "связать" сырой звуковой файл с рукой, чтобы он воспроизводился.НО, что я хочу сделать, это, возможно, связать 3-секундный звук с кнопкой и просто зациклить его, пока пользователь удерживает кнопку, а затем останавливает воспроизведение, когда кнопка отпущена.У любого есть примеры ссылок, которыми они могут поделиться, это было бы здорово!Спасибо!

редактировать: Спасибо Cpt.Ohlund!

Спасибо, что было определенно полезно и добилось цели, однако я столкнулся с еще 1 небольшой проблемой, может быть, вы могли бы помочь мнеИспользование «Пользовательской кнопки», как показано на http://developer.android.com/resources/tutorials/views/hello-formstuff.html

До того, как я добавил «слушателя onTouch», все работало нормально. Кнопка теперь не использует свой android: state_pressed Item, она просто отображает обычный элементно не нажатый элемент. По крайней мере, теперь он воспроизводит звук. Но есть идеи?

1 Ответ

2 голосов
/ 26 августа 2010

Вы можете использовать следующее, просто измените R.raw.hit на свой собственный звуковой файл:

public class XButtonSound extends Activity implements OnTouchListener {

private int sound;
private SoundPool sounds;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    Button donePlacing = new Button(this.getApplicationContext());
    donePlacing.setId(1);
    donePlacing.setText("Play");
    donePlacing.setOnTouchListener(this);

    this.addContentView(donePlacing, new LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT));


    sounds = new SoundPool(5, AudioManager.STREAM_MUSIC, 0);
    sound = sounds.load(this.getApplicationContext(), R.raw.hit, 1);
}


@Override
public boolean onTouch(View arg0, MotionEvent event) {

    switch (event.getAction() ) { 
    case MotionEvent.ACTION_DOWN: 
        System.out.println("touch");
        sounds.play(sound, 1, 1, 1, -1, 1);
        break;
    case MotionEvent.ACTION_UP:
        System.out.println("up");
        sounds.autoPause();
        break; 
    }

    return true;
}

}

...