Я разрабатываю приложение для фортепиано, это не самое лучшее, но это начало.Правильно ли иметь много onTouchListener?
Я использую ниже код для воспроизведения звука и изменения изображения кнопки с событием касания.
C4.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
switch(event.getAction()) {
case MotionEvent.ACTION_DOWN:
// PRESSED
if (Sustain == "false") {
streamI25 = sp.play(SC4, Volume, Volume, 0, 0, 1);
C4.setBackgroundResource(R.drawable.whitekey1cilicked);
}
else {
sp.play(SC4, Volume, Volume, 0, 0, 1);
C4.setBackgroundResource(R.drawable.whitekey1cilicked);
}
// just in case somthings happend
final Handler handler2 = new Handler();
handler2.postDelayed(new Runnable() {
@Override
public void run() {
//Do something after 100ms
C4.setBackgroundResource(R.drawable.whitekey1);
}
}, keyUpTime);
return true; // if you want to handle the touch event
case MotionEvent.ACTION_UP:
// RELEASED
C4.setBackgroundResource(R.drawable.whitekey1);
final Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
//Do something after 100ms
sp.pause(streamI25);
}
}, releaseTime);
return true; // if you want to handle the touch event
}
return false;
}
});
Правильно ли это? Разве это не глупо писать весь этот код для каждого ключа на фортепиано?
Я могу использовать только несколько строк кода для всех своих кнопок в методе OnClick, но мне нужны события onTouch. Правильно ли писать 72 onTouchListener?
Я не один, чтобы сказать очень много мудрых. Однако, если вы хотите сделать это таким образом, я лично создам класс для ключа фортепиано и создаю ваши ключи как объекты и сохраняю их в массиве. таким образом вы могли бы дать им все, что им нужно, и сэкономить много места. Это только если вы решите сделать это именно так. – Pixelknight1398