根据点击的图像播放声音

时间:2012-06-29 04:18:20

标签: android android-mediaplayer

当我点击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>

2 个答案:

答案 0 :(得分:2)

如果您只想在按钮上播放不同的声音,那么我会建议:

  • 使用按钮的setTag()方法。像button1.setTag(0);一样 或button1.setTag("guitarmusic");
  • 您会注意到View.OnClickListener's onClick()方法 得到View作为参数。
  • 你知道,你只将这个OnClickListener设置为按钮,所以你 可以将View方法中的onClick()转换为Button Button clicked = (Button) view;
  • 然后你可以访问你之前设置按钮的标签,然后 也投了他们,比如:Integer buttonTag = (Integer) clicked.getTag();
  • 然后你可以用一个简单的switch决定你想要的声音 玩,如:switch(buttonTag){case 0: play first sound... break; ...}

这样你就不需要单独的OnClickListener来播放你想要播放的每一个声音:)

答案 1 :(得分: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();
    }