我不知道我的钢琴应用程序应该使用哪种小部件。
我尝试使用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手机上试用它时,它不起作用。
我还使用RelativeLayout来使钢琴的白键和黑键相互重叠。我不知道它是否与每个屏幕分辨率完美配合,我也希望你对这个问题有所了解。
任何帮助将不胜感激。谢谢!
答案 0 :(得分:0)
您正在使用此代码阻止GUI线程。创建一个线程,并在另一个线程上播放媒体。并且最好的方法是使用AsynTask类。但在这种情况下,您可以使用大大简化的runnable方法。看一看。
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();
}
});
我没有测试过这段代码,但它应该可行。如果您有任何问题,请随时询问。