2012-01-29 12 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; 
} 
}); 

問題は、それがエミュレータ上で動作しないで、ときに私がアンドロイド携帯電話上でそれを試してみました、それは動作しませんでした。

また、RelativeLayoutを使って、ピアノの白鍵と黒鍵が重なり合うようにしました。私はそれがすべての画面の解像度で完璧に動作するかどうかわからないと私はあなたもこの1つに関する意見をしたい。

助けていただければ幸いです。ありがとう!!

答えて

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

私はそれを試してみましたが、うまくいきましたが、キーを2回押すと、1つのサウンドしか生成されず、サウンドを終了してからもう一度押すことができます。そして、私がピアノのような "スライド"のことをやろうとすると、うまくいきません。 – nicxzkie

+0

public voidを使用しようとするとエラーが発生するため、public booleanを使用してfalseに戻しました。 – nicxzkie

関連する問題