2012-01-29 15 views
0

我不知道我的钢琴应用程序应该使用哪种小部件。我应该用什么来创建一个钢琴应用程序? ImageView的,等等?

我试图使用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

您正在用此代码阻止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(); 
    } 
}); 

我还没有测试过这个代码,但它应该可能工作。随意问你是否有任何问题。

+0

我试了一下,它的工作原理,但如果我按两次键它只会产生一个声音,并会等待声音完成,然后再按一次。当我试图像在钢琴上那样做“幻灯片”时,它不起作用。 – nicxzkie 2012-01-29 09:43:41

+0

我每次尝试使用public void时都会出错,因此我使用了公共布尔值并将其返回false。 – nicxzkie 2012-01-29 14:54:20

相关问题