我正在学习 Android,我的第一个应用程序是一个简单的乐器。我现在有 7 个按钮,每个按钮都使用 MediaPlayer。问题是每个按钮都有相同的功能,我想避免在 Onclick 方法上使用 switch 语句 - 这是我在网络上找到的唯一的东西。有人告诉我用相应的 mp3 文件命名按钮,并编写一个简单的“播放”函数来匹配正确的键/按钮,但我想我做得不对。有人可以帮我吗?这是我所得到的,非常感谢您的帮助:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
//these buttons have the same name as the mp3 key notes file
c1= (Button) findViewById(R.id.key1);
c1.setOnClickListener(this);
d1= (Button) findViewById(R.id.key2);
d1.setOnClickListener(this);
e1= (Button) findViewById(R.id.key3);
e1.setOnClickListener(this);
f1= (Button) findViewById(R.id.key4);
f1.setOnClickListener(this);
g1= (Button) findViewById(R.id.key5);
g1.setOnClickListener(this);
a1=(Button) findViewById(R.id.key6);
a1.setOnClickListener(this);
b1=(Button) findViewById(R.id.key7);
b1.setOnClickListener(this);
OnClick 方法(当然,第一个 if 示例有效,但如果我想要一个复杂的工具,我将有重复的代码。所以我希望这个“else”成为唯一的语句):
@Override
public void onClick(View v) {
Button b = (Button)v;
String note=b.getText().toString();
if(v==c1){
mp = MediaPlayer.create(this, R.raw.c1);
mp.start();
}
else{
play( note+".mp3");
}
以及玩法的尝试:
public void play(String note){
note.equals("cs2");//??
//the mp3 files are stored in res/raw and I also tried that specific path, but it didn't work. The keys are silent, except the c1
}
编辑: 现在我只有这个:
public void play(String note){
mp = MediaPlayer.create(this,getResources().getIdentifier(note,"raw",getPackageName()));
mp.start();
}
@Override
public void onClick(View v) {
clickCount++;
updateClickCount();
Button b = (Button)v;
String note=b.getText().toString();
play(note);
}
但是应用程序仍然崩溃
编辑:XML
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_main2"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.example.vtorferreira.sounds.MainActivity">
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.example.vtorferreira.sounds.MainActivity">
<ImageView
android:layout_width="300dp"
android:layout_height="1200dp"
android:id="@+id/kid"
android:src="@drawable/kid"
android:layout_alignParentLeft="true"
android:layout_alignParentRight="true"
android:clickable="true"/>
<ImageView
android:layout_width="300dp"
android:layout_height="1200dp"
android:id="@+id/partido"
android:layout_alignParentLeft="true"
android:layout_alignParentRight="true"
android:clickable="true"/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:layout_weight="10">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="5"
android:orientation="horizontal"
android:weightSum="34"
android:gravity="center">
<Button
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:layout_marginLeft="3dp"
android:layout_marginRight="3dp"
android:background="#9BC53D"
android:visibility="invisible"
android:id="@+id/key1_ext"/>
<Button
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="2"
android:layout_marginLeft="1dp"
android:layout_marginRight="1dp"
android:background="#000000"
android:visibility="invisible"
android:id="@+id/black1"/>
<Button
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:layout_marginLeft="3dp"
android:layout_marginRight="3dp"
android:background="#2660A4"
android:visibility="invisible"
android:id="@+id/key2_ext"/>
<Button
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="2"
android:layout_marginLeft="3dp"
android:layout_marginRight="3dp"
android:background="#000000"
android:visibility="invisible"
android:id="@+id/black2"/>
<Button
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:layout_marginLeft="3dp"
android:layout_marginRight="3dp"
android:background="#399E5A"
android:visibility="invisible"
android:id="@+id/key3_ext"/>
<Button
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:layout_marginLeft="3dp"
android:layout_marginRight="3dp"
android:background="#5F0F40"
android:visibility="invisible"
android:id="@+id/key4_ext"/>
<Button
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="2"
android:layout_marginLeft="3dp"
android:layout_marginRight="3dp"
android:background="#000000"
android:visibility="invisible"
android:id="@+id/black3"/>
<Button
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:layout_marginLeft="3dp"
android:layout_marginRight="3dp"
android:background="#FA7921"
android:visibility="invisible"
android:id="@+id/key5_ext"/>
<Button
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="2"
android:layout_marginLeft="3dp"
android:layout_marginRight="3dp"
android:background="#000000"
android:visibility="invisible"
android:id="@+id/black4"/>
<Button
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:layout_marginLeft="3dp"
android:layout_marginRight="3dp"
android:background="#9BC53D"
android:visibility="invisible"
android:id="@+id/key6_ext"/>
<Button
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="2"
android:layout_marginLeft="3dp"
android:layout_marginRight="3dp"
android:background="#000000"
android:visibility="invisible"
android:id="@+id/black5"/>
<Button
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:layout_marginLeft="3dp"
android:layout_marginRight="3dp"
android:background="#2660A4"
android:visibility="invisible"
android:id="@+id/key7_ext"/>
<Button
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:layout_marginLeft="3dp"
android:layout_marginRight="3dp"
android:background="#399E5A"
android:visibility="invisible"
android:id="@+id/key8_ext"/>
<Button
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="2"
android:layout_marginLeft="3dp"
android:layout_marginRight="3dp"
android:background="#000000"
android:visibility="invisible"
android:id="@+id/black6"/>
<Button
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:layout_marginLeft="3dp"
android:layout_marginRight="3dp"
android:background="#5F0F40"
android:visibility="invisible"
android:id="@+id/key9_ext"/>
<Button
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="2"
android:layout_marginLeft="3dp"
android:layout_marginRight="3dp"
android:background="#000000"
android:visibility="invisible"
android:id="@+id/black7"/>
<Button
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:layout_marginLeft="3dp"
android:layout_marginRight="3dp"
android:background="#FA7921"
android:visibility="invisible"
android:id="@+id/key10_ext"/>
<Button
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="2"
android:layout_marginLeft="3dp"
android:layout_marginRight="3dp"
android:background="#000000"
android:visibility="invisible"
android:id="@+id/black8"/>
<Button
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:layout_marginLeft="3dp"
android:layout_marginRight="3dp"
android:background="#9BC53D"
android:visibility="invisible"
android:id="@+id/key11_ext"/>
<Button
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:layout_marginLeft="3dp"
android:layout_marginRight="3dp"
android:background="#2660A4"
android:visibility="invisible"
android:id="@+id/key12_ext"/>
<Button
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="2"
android:layout_marginLeft="3dp"
android:layout_marginRight="3dp"
android:background="#000000"
android:visibility="invisible"
android:id="@+id/black9"/>
<Button
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:layout_marginLeft="3dp"
android:layout_marginRight="3dp"
android:background="#399E5A"
android:visibility="invisible"
android:id="@+id/key13_ext"/>
<Button
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="2"
android:layout_marginLeft="3dp"
android:layout_marginRight="3dp"
android:background="#000000"
android:visibility="invisible"
android:id="@+id/black10"/>
<Button
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:layout_marginLeft="3dp"
android:layout_marginRight="3dp"
android:background="#5F0F40"
android:visibility="invisible"
android:id="@+id/key14_ext"/>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="10"
android:orientation="horizontal"
android:weightSum="7"
android:gravity="center">
<Button
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="0.5"
android:layout_marginLeft="3dp"
android:layout_marginRight="3dp"
android:background="#2660A4"
android:visibility="invisible"
android:id="@+id/key1"/>
<Button
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="0.5"
android:layout_marginLeft="3dp"
android:layout_marginRight="3dp"
android:background="#2660A4"
android:visibility="invisible"
android:id="@+id/key2"/>
<Button
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="0.5"
android:layout_marginLeft="3dp"
android:layout_marginRight="3dp"
android:background="#399E5A"
android:visibility="invisible"
android:id="@+id/key3"/>
<Button
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="0.5"
android:layout_marginLeft="3dp"
android:layout_marginRight="3dp"
android:background="#5F0F40"
android:visibility="invisible"
android:id="@+id/key4"/>
<Button
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="0.5"
android:layout_marginLeft="3dp"
android:layout_marginRight="3dp"
android:background="#FA7921"
android:visibility="invisible"
android:id="@+id/key5"/>
<Button
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="0.5"
android:layout_marginLeft="3dp"
android:layout_marginRight="3dp"
android:background="#9BC53D"
android:visibility="invisible"
android:id="@+id/key6"/>
<Button
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="0.5"
android:layout_marginLeft="3dp"
android:layout_marginRight="3dp"
android:background="#2660A4"
android:visibility="invisible"
android:id="@+id/key7"/>
<Button
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="0.5"
android:layout_marginLeft="3dp"
android:layout_marginRight="3dp"
android:background="#399E5A"
android:visibility="invisible"
android:id="@+id/key8"/>
<Button
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="0.5"
android:layout_marginLeft="3dp"
android:layout_marginRight="3dp"
android:background="#5F0F40"
android:visibility="invisible"
android:id="@+id/key9"/>
<Button
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="0.5"
android:layout_marginLeft="3dp"
android:layout_marginRight="3dp"
android:background="#FA7921"
android:visibility="invisible"
android:id="@+id/key10"/>
<Button
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="0.5"
android:layout_marginLeft="3dp"
android:layout_marginRight="3dp"
android:background="#9BC53D"
android:visibility="invisible"
android:id="@+id/key11"/>
<Button
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="0.5"
android:layout_marginLeft="3dp"
android:layout_marginRight="3dp"
android:background="#2660A4"
android:visibility="invisible"
android:id="@+id/key12"/>
<Button
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="0.5"
android:layout_marginLeft="3dp"
android:layout_marginRight="3dp"
android:background="#399E5A"
android:visibility="invisible"
android:id="@+id/key13"/>
<Button
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="0.5"
android:layout_marginLeft="3dp"
android:layout_marginRight="3dp"
android:background="#5F0F40"
android:visibility="invisible"
android:id="@+id/key14"/>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="6"
android:orientation="horizontal"
android:weightSum="10"
android:gravity="center">
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1"
android:gravity="center"
android:id="@+id/pontos"
android:textSize="15sp"
android:textStyle="normal|bold" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="0"
android:orientation="horizontal"
android:weightSum="8"
android:gravity="center">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="0"
android:orientation="horizontal"
android:gravity="center">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:layout_marginLeft="2dp"
android:layout_marginRight="2dp"
android:background="#2072CA"
android:id="@+id/pref"
android:text="Preferences"
/>
<ToggleButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:layout_marginLeft="2dp"
android:layout_marginRight="2dp"
android:background="#2072CA"
android:id="@+id/solo"
android:textOff="Play Magic Piano!"
android:textOn="Close Piano"/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:layout_marginLeft="2dp"
android:layout_marginRight="2dp"
android:background="#2072CA"
android:id="@+id/learn"
android:text="Learn about piano"
/>
</LinearLayout>
</LinearLayout>
</LinearLayout>
</RelativeLayout>
</RelativeLayout>
删除文件扩展名(+“.mp3”)并使用:
getResources().getIdentifier("FILE NAME WITHOUT EXTENSION","raw", getPackageName())
还要确保每个按钮文本都包含原始文件夹中存在的文件名(不带扩展名)。例如“c1”。
最终代码应如下所示:
@Override
public void onClick(View v) {
Button b = (Button)v;
String note = b.getText().toString().toLowerCase();
play(note);
}
public void play(String note){
try {
mp = MediaPlayer.create(this,getResources().getIdentifier(note,"raw", getPackageName()));
mp.start();
} catch (Exception e) {
Log.e("Error", "error playing file with name : " + note + "\n" + e);
}
}
您必须在按钮元素上设置文本。对于每个文件,您应该显示一个文件名。例如添加
android:text"c1"
:
<Button
android:text="c1"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="0.5"
android:layout_marginLeft="3dp"
android:layout_marginRight="3dp"
android:background="#2660A4"
android:visibility="visible"
android:id="@+id/key1"/>
为了澄清一点,代码检索按钮上的文本。例如“c1”。然后,您的应用程序将尝试在原始文件夹中查找名为 c1 的文件。如果您没有在按钮上设置任何文本...那么当然,您的应用程序将找不到任何名称为 '' 的资源!希望你明白我的意思。