Java 图像更改时添加声音
这是我的尝试:当按下按钮时,会出现一个不同的随机图像(此部分工作)。我不能去工作的是我想做的另一件事。根据出现的图像将取决于播放的声音片段。i、 e.如果图像是一辆黑色汽车,将播放两个单独的文件;一个写黑色,另一个写汽车。非常感谢您的帮助。这是我的密码:Java 图像更改时添加声音,java,android,android-mediaplayer,Java,Android,Android Mediaplayer,这是我的尝试:当按下按钮时,会出现一个不同的随机图像(此部分工作)。我不能去工作的是我想做的另一件事。根据出现的图像将取决于播放的声音片段。i、 e.如果图像是一辆黑色汽车,将播放两个单独的文件;一个写黑色,另一个写汽车。非常感谢您的帮助。这是我的密码: public class Black extends Activity { ImageView imageView; MediaPlayer mp; int sound=525,sound1=525; pu
public class Black extends Activity {
ImageView imageView;
MediaPlayer mp;
int sound=525,sound1=525;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.black);
Button Button1 = (Button) findViewById(R.id.button1);
imageView= (ImageView)findViewById(R.id.image1);
Button1.setOnClickListener( new OnClickListener(){
public void onClick(View v){
onClickImageView(v);
}
});
}
public void onClickImageView(View view) {
int[] picture= {
R.drawable.black,R.drawable.blackairplane,R.drawable.blackbear,R.drawable.blackcar,R.drawable.blackcircle,
R.drawable.blackkite,R.drawable.blacksquare,R.drawable.blacktriangle};
Random r = new Random();
int n=r.nextInt(7);
imageView.setImageResource(picture[n]);
switch (picture[n]) {
case R.drawable.black:
sound = R.raw.sayblack;
sound1 = R.raw.sayblack;
break;
case R.drawable.blackairplane:
sound = R.raw.sayblack;
sound1= R.raw.sayairplane;
break;
case R.drawable.blackbear:
sound = R.raw.sayblack;
sound1 = R.raw.saybear;
break;
case R.drawable.blackcar:
sound = R.raw.sayblack;
sound1= R.raw.saycar;
break;
case R.drawable.blackcircle:
sound = R.raw.sayblack;
sound1=R.raw.saycircle;
break;
case R.drawable.blackkite:
sound = R.raw.sayblack;
sound1 = + R.raw.saykite;
break;
case R.drawable.blacksquare:
sound = R.raw.sayblack;
sound1 = R.raw.saysquare;
break;
case R.drawable.blacktriangle:
sound = R.raw.sayblack;
sound1= R.raw.saytriangle;
break;
}
if(mp!=null){
mp.release();
}
if(sound!=0){
mp = MediaPlayer.create(getBaseContext(), sound);
mp.start();
}
mp.setOnCompletionListener (new MediaPlayer.OnCompletionListener(){
@Override
public void onCompletion(MediaPlayer arg0) {
// TODO Auto-generated method stub
if(sound1!=0 && sound!=0){
mp= MediaPlayer.create(getBaseContext(),sound1);
mp.start();
sound=sound1=525;
}}
});
}
}
这是我的.xml文件:
<Button
android:id="@+id/button1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_marginBottom="40dp"
android:background="@color/white"
android:text="@string/black" />
<ImageView
android:id="@+id/image1"
android:layout_width="320dp"
android:layout_height="250dp"
android:scaleType="fitXY"
android:contentDescription="@string/black" />
。。。这是正确的代码。您有一个imageView,并且在交换机机箱中使用它的id。您的切换情况应该取决于您的图片,而不是您的ImageView id。如果您有一个
ImageView
,则不能使用switch语句,因为您的ImageView
具有唯一的id并且始终保持不变 使用以下代码
public class Black extends Activity {
ImageView imageView;
MediaPlayer mp;
int sound=525,sound1=525;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.black);
Button Button1 = (Button) findViewById(R.id.button1);
imageView= (ImageView)findViewById(R.id.image1);
Button1.setOnClickListner( new OnClickListener(){
public void onClick(view v){
onClickImageView(v);
}
});
}
public void onClickImageView(View view) {
int[] picture= {
R.drawable.black,R.drawable.blackairplane,R.drawable.blackbear,R.drawable.blackcar,R.drawable.blackcircle,R.drawable.blackkite,R.drawable.blacksquare,R.drawable.blacktriangle};
Random r = new Random();
int n=r.nextInt(7);
imageView.setImageResource(picture[n]);
switch (picture[n]) { //here is the change in code
case R.drawable.black:
sound = R.raw.sayblack;
break;
case R.drawable.blackairplane:
sound = R.raw.sayblack ;
sound1= R.raw.sayplane;
break;
case R.drawable.blackcar:
sound = R.raw.sayblack;
sound1= R.raw.saycar;
break;
case R.drawable.blackcircle:
sound = R.raw.sayblack ;
sound1=R.raw.saycircle;
break;
case R.drawable.blackkite:
sound = R.raw.sayblack ;
sound1 = + R.raw.saykite;
break;
case R.drawable.blacksquare:
sound = R.raw.sayblack ;
sound1 = R.raw.saysquare;
break;
case R.drawable.blacktriangle:
sound = R.raw.sayblack ;
sound1= R.raw.saytriangle;
break;
}
if(mp!=null){
mp.release();
}
if(sound!=0){
mp = MediaPlayer.create(getBaseContext(), sound);
mp.start();
}
mp.setOnCompletionListener (new MediaPlayer.OnCompletionListener(){
@Override
public void onCompletion(MediaPlayer arg0) {
// TODO Auto-generated method stub
if(sound1!=0 && sound!=0){
mp= MediaPlayer.create(getBaseContext(),sound1);
mp.start();
sound=sound1=525;
}}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
在URXML中更改按钮如下(从xml中删除onclick att,并在运行时用java代码动态执行),我可以在onclick of button视图中看到错误,现在这段代码肯定可以工作了
<Button
android:id="@+id/button1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_marginBottom="40dp"
android:background="@color/white"
android:text="@string/black"
/>
这应该行得通
public class Black extends Activity {
ImageView imageView;
MediaPlayer mp;
/* add this here */
Context context;
int sound=525,sound1=525;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.black);
/* add this here */
context = this;
Button Button1 = (Button) findViewById(R.id.button1);
imageView= (ImageView)findViewById(R.id.image1);
Button1.setOnClickListener( new OnClickListener(){
public void onClick(View v){
onClickImageView(v);
}
});
}
public void onClickImageView(View view) {
int[] picture= {
R.drawable.black,R.drawable.blackairplane,R.drawable.blackbear,R.drawable.blackcar,R.drawable.blackcircle,
R.drawable.blackkite,R.drawable.blacksquare,R.drawable.blacktriangle};
Random r = new Random();
int n=r.nextInt(7);
imageView.setImageResource(picture[n]);
switch (picture[n]) {
case R.drawable.black:
sound = R.raw.sayblack;
sound1 = R.raw.sayblack;
break;
case R.drawable.blackairplane:
sound = R.raw.sayblack;
sound1= R.raw.sayairplane;
break;
case R.drawable.blackbear:
sound = R.raw.sayblack;
sound1 = R.raw.saybear;
break;
case R.drawable.blackcar:
sound = R.raw.sayblack;
sound1= R.raw.saycar;
break;
case R.drawable.blackcircle:
sound = R.raw.sayblack;
sound1=R.raw.saycircle;
break;
case R.drawable.blackkite:
sound = R.raw.sayblack;
sound1 = + R.raw.saykite;
break;
case R.drawable.blacksquare:
sound = R.raw.sayblack;
sound1 = R.raw.saysquare;
break;
case R.drawable.blacktriangle:
sound = R.raw.sayblack;
sound1= R.raw.saytriangle;
break;
}
//if still playing stop it
if( mp!=null && mp.isPlaying() ){
mp.stop();
mp.release();
mp = null;
}
//play selected
mp = MediaPlayer.create(context, sound);
mp.start();
mp.setOnCompletionListener (new MediaPlayer.OnCompletionListener(){
@Override
public void onCompletion(MediaPlayer arg0) {
// TODO Auto-generated method stub
if(sound1!=0 && sound!=0){
mp= MediaPlayer.create(context,sound1);
mp.start();
sound=sound1=525;
}}
});
}
}
您忘记在mp.start()之前添加if(mp!=null){mp.stop();},以防止重复的声音;)我做了你建议的改变。它仍然不起作用,我已经发布了日志文件。有什么想法吗?(因为我迷路了)出现错误:构造函数MediaPlayer(Context,int)未定义;参考以下行:mp=newmediaplayer(getBaseContext(),sound1);。我试图给它下定义,但没有被识别。我得到了同样的结果。我通过AVD和我的手机运行它,结果是一样的…每个图像的音频都是“黑色”的,你做的事情不是我用最新代码引起的,当我按下按钮时,应用程序再次停止。我已经更新了我的原始.java代码,以及带有错误的Logcat。谢谢你的帮助。我非常感激,因为我已经尽可能多地尝试和研究,试图为自己解决这个问题。