Что я должен использовать для создания приложения для фортепиано?ImageView и т.д.? - PullRequest
0 голосов
/ 29 января 2012

Я не знаю, какой виджет я должен использовать для своего приложения для фортепиано.

Я пытался использовать ImageView для клавиш и прикрепил к нему setOnTouchListener.Это работает, но каким-то образом изображение должно закончить звук, который он произвел, прежде чем вы сможете нажать его снова. Я использовал MediaPlayer для звуков.Я также хочу сделать «слайд» с помощью клавиш, и я пытался использовать следующие строки кода:

final MediaPlayer whiteP1 = MediaPlayer.create(this, R.raw.white_1);
white1.setOnTouchListener(new View.OnTouchListener() {

@Override
public boolean onTouch(View v, MotionEvent event) {
// TODO Auto-generated method stub

// to make the keys work (produce sounds) i removed this line of codes:
   int i = event.getAction(); // i removed this line and the if statement and left the whiteP1.start();
if(i == MotionEvent.ACTION_MOVE)
{ 
whiteP1.start(); 
}
return false;
}
});

проблема в том, что он не работает на эмуляторе, и когда я попробовал его наAndroid Phone, он не работал.

Я также использовал RelativeLayout, чтобы белые и черные клавиши пианино накладывались друг на друга.Я не знаю, работает ли он идеально с каждым разрешением экрана, и я хочу, чтобы ваше мнение относительно этого тоже.

любая помощь будет оценена.спасибо !!

1 Ответ

0 голосов
/ 29 января 2012

Вы блокируете поток GUI этим кодом.Создайте поток и воспроизведите мультимедиа в другом потоке.И лучший способ сделать то же самое - использовать класс AsynTask.Но в этом случае вы можете использовать значительно упрощенный исполняемый метод.Посмотрите.

final MediaPlayer whiteP1 = MediaPlayer.create(this, R.raw.white_1);
white1.setOnTouchListener(new View.OnTouchListener() {
    @Override
    public void onTouch(View v, MotionEvent event) {
        new Thread(new Runnable() {
            public void run() {
                int i = event.getAction();
                whiteP1.start();
                if(i == MotionEvent.ACTION_MOVE)    {
                    whiteP1.start();
                }
            }
        }).start();
    }
});

Я не тестировал этот код, но он, вероятно, должен работать.Не стесняйтесь спрашивать, если у вас нет вопросов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...