这是我的尝试:当按钮按下一个不同的随机图像出现(这部分工作)。我不能做的是我希望它做的另一部分。取决于哪个图像出现将取决于哪个片段被播放。例如,如果图像是一辆黑色的汽车,将有2个独立的文件播放;一个是黑色,另一个是汽车。非常感谢任何帮助。下面是我的代码:
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" />
…这是正确的代码
使用以下代码
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;
}
}
更改按钮如下在ur xml(从xml中删除onclick att,并在java代码运行时动态地做),我可以看到按钮视图的onclick错误,现在这段代码肯定会工作
<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,你在你的开关情况下使用它的id。你的切换案例应该取决于你的图片,而不是你的imageViews id。
如果你有一个ImageView
,你不能使用switch语句,因为你的ImageView
有唯一的id,总是保持不变。
应该可以了
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;
}}
});
}
}