0

に描かれた絵をクリックすると、アプリケーションがサウンドを再生するようにしようとしていますArray。私がやりたいのは、別の画像をクリックすると別の音を鳴らすことです。

これまでのところ、これは私のJavaコードです:

public class gorendis extends Activity implements MediaPlayer.OnCompletionListener{
    private ImageView play;
    private ImageView a2;
    private MediaPlayer mp;

    @Override
    public void onCreate(Bundle icicle) {
        super.onCreate(icicle);
        setContentView(R.layout.huruf);

        play=(ImageView)findViewById(R.id.a1);
        a2=(ImageView)findViewById(R.id.a2);
        //gambar=(ImageButton)findViewById(R.id.gambar);

        //gambar.setImageResource(R.drawable.a1);

        play.setOnClickListener( new View.OnClickListener() {
            public void onClick(View view) {
                play();
            }
        });

        a2.setOnClickListener( new View.OnClickListener() {
            public void onClick(View view) {
                play();
            }
        });

        setup();
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
    }

    public void onCompletion(MediaPlayer mp) {
        stop();
    }

    private void stop() {
        // TODO Auto-generated method stub
    }

    private void play() {
        mp.start();
        play.setEnabled(true);
    }

    private void loadClip() {
        try {
            mp=MediaPlayer.create(this, R.raw.doajodoh);
            mp.setOnCompletionListener(this);
        } catch (Throwable t) {
            goBlooey(t);
        }
    }

    private void setup() {
        loadClip();
        play.setEnabled(true);
    }

    private void goBlooey(Throwable t) {
        AlertDialog.Builder builder=new AlertDialog.Builder(this);

        builder.setTitle("Exception!")
               .setMessage(t.toString())
               .setPositiveButton("OK", null)
               .show();
    }
}

メイン レイアウト XML:

<?xml version="1.0" encoding="utf-8"?>
<ScrollView>

    <LinearLayout>

        <ImageView
            android:id="@+id/play"
            android:layout_width="wrap_content"
            android:layout_height="53px"
            android:background="@android:color/transparent"
            android:scaleType="fitCenter"
            android:src="@drawable/a1" >
        </ImageView>

        <ImageView
            android:id="@+id/a2"
            android:layout_width="wrap_content"
            android:layout_height="53px"
            android:background="@android:color/transparent"
            android:scaleType="fitCenter"
            android:src="@drawable/a2" >
        </ImageView>
    </LinearLayout>

</ScrollView>
4

2 に答える 2

2

ボタンクリックで異なるサウンドを再生したい場合は、次のようにアドバイスします。

  • setTag()ボタンの方法を使用します。いいねbutton1.setTag(0);button1.setTag("guitarmusic");
  • View.OnClickListener's onClick()メソッドがViewas パラメータを取得することに気付くでしょう。
  • OnClickListenerこれをボタンのみに設定しているので、これViewonClick()メソッドでキャストしてButtonlike にすることができます。Button clicked = (Button) view;
  • 次に、前にボタンに設定したタグにアクセスし、次のようにキャストすることもできます。Integer buttonTag = (Integer) clicked.getTag();
  • 次に、次のように、再生するサウンドを単純なswitchで決定できます。switch(buttonTag){case 0: play first sound... break; ...}

このようにして、再生したいすべてのサウンドに個別の OnClickListener は必要ありません:)

于 2012-08-04T08:42:40.050 に答える
1

最後に、私はこの解決策を見つけました..これは、長いコードでも機能します!!

public class part1 extends Activity implements MediaPlayer.OnCompletionListener{
       /** Called when the activity is first created. */

    private ImageView a2;
    private ImageView a3;
    private ImageView a4;

    @Override
    public void onCreate(Bundle icicle) {
        super.onCreate(icicle);
        setContentView(R.layout.main);

        a2=(ImageView)findViewById(R.id.a2);
        a3=(ImageView)findViewById(R.id.a3);
        a4=(ImageView)findViewById(R.id.a4);

        a2.setOnClickListener(new View.OnClickListener() {
            public void onClick(View view) {

                a2();
            }               
        });
        setup();

        a3.setOnClickListener(new View.OnClickListener() {
            public void onClick(View view) {

                a3();
            }               
        });
        setup2();
        a4.setOnClickListener(new View.OnClickListener() {
            public void onClick(View view) {
                a4();
            }
        });
        setup3();

        public void onCompletion(MediaPlayer mp) {
        stop();
    }

    private void stop() {
        mp.stop();

    }

    private void a2() {
        mp.stop();
        loadClip();
        mp.start();

        a2.setEnabled(true);
    }
    private void a3() {
        mp.stop();
        loadClip2();
        mp.start();

        a3.setEnabled(true);
    }
    private void a4() {
        mp.stop();
        loadClip3();
        mp.start();

        a4.setEnabled(true);
    }

    private void loadClip() {

        try {
            mp=MediaPlayer.create(this, R.raw.a2);
            mp.setOnCompletionListener(this);

        }
        catch (Throwable t) {
            goBlooey(t);
        }
    }
    private void loadClip2() {

        try {
            mp=MediaPlayer.create(this, R.raw.a3);
            mp.setOnCompletionListener(this);

        }
        catch (Throwable t) {
            goBlooey(t);
        }
    }

    private void loadClip3() {

        try {
            mp=MediaPlayer.create(this, R.raw.a4);
            mp.setOnCompletionListener(this);

        }
        catch (Throwable t) {
            goBlooey(t);
        }
    }

    private void setup() {
        loadClip();
        a2.setEnabled(true);
    }
    private void setup2() {
        loadClip2();
        a3.setEnabled(true);
    }

    private void setup3() {
        loadClip3();
        a4.setEnabled(true);
    }

    private void goBlooey(Throwable t) {
        AlertDialog.Builder builder=new AlertDialog.Builder(this);

        builder
            .setTitle("Exception!")
            .setMessage(t.toString())
            .setPositiveButton("OK", null)
            .show();
    }
于 2012-08-04T07:27:16.860 に答える