我应该用什么来制作钢琴应用? ImageView的,等等?

时间:2012-01-29 09:06:29

标签: android android-layout android-widget

我不知道我的钢琴应用程序应该使用哪种小部件。

我尝试使用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来使钢琴的白键和黑键相互重叠。我不知道它是否与每个屏幕分辨率完美配合,我也希望你对这个问题有所了解。

任何帮助将不胜感激。谢谢!

1 个答案:

答案 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();
    }
});

我没有测试过这段代码,但它应该可行。如果您有任何问题,请随时询问。