0

これは私の最初の適切なアプリケーションであり、うまく機能しますが、私のコードを短くして繰り返しを少なくできる人を知りたいですか? これが私のコードで、サウンドボード用です:

public class MainActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

    //Tell system to use Media Volume rather than Ringer

    setVolumeControlStream(AudioManager.STREAM_MUSIC);

    // Button references

    Button button1 = (Button) findViewById(R.id.button1);
    Button button2 = (Button) findViewById(R.id.button2);
    Button button3 = (Button) findViewById(R.id.button3);
    Button button4 = (Button) findViewById(R.id.button4);
    Button button5 = (Button) findViewById(R.id.button5);
    Button button6 = (Button) findViewById(R.id.button6);

    Button button8 = (Button) findViewById(R.id.button8);
    Button button9 = (Button) findViewById(R.id.button9);
    Button button10 = (Button) findViewById(R.id.button10);
    Button button11 = (Button) findViewById(R.id.button11);
    Button button12 = (Button) findViewById(R.id.button12);
    Button button13 = (Button) findViewById(R.id.button13);


    // Button Sounds to be used by onClickListener

    final MediaPlayer buttonSound1 = MediaPlayer.create(MainActivity.this,
            R.raw.afternoondelight);
    final MediaPlayer buttonSound2 = MediaPlayer.create(MainActivity.this,
            R.raw.alrightythen);
    final MediaPlayer buttonSound3 = MediaPlayer.create(MainActivity.this,
            R.raw.ballsshowing);
    final MediaPlayer buttonSound4 = MediaPlayer.create(MainActivity.this,
            R.raw.blackmen);
    final MediaPlayer buttonSound5 = MediaPlayer.create(MainActivity.this,
            R.raw.doh);
    final MediaPlayer buttonSound6 = MediaPlayer.create(MainActivity.this,
            R.raw.fxxk);
    final MediaPlayer buttonSound8 = MediaPlayer.create(MainActivity.this,
            R.raw.mclovin);
    final MediaPlayer buttonSound9 = MediaPlayer.create(MainActivity.this,
            R.raw.pacmandeath);
    final MediaPlayer buttonSound10 = MediaPlayer.create(MainActivity.this,
            R.raw.quickwhite);
    final MediaPlayer buttonSound11 = MediaPlayer.create(MainActivity.this,
            R.raw.sexylady);
    final MediaPlayer buttonSound12 = MediaPlayer.create(MainActivity.this,
            R.raw.troll);
    final MediaPlayer buttonSound13 = MediaPlayer.create(MainActivity.this,
            R.raw.turd);

    //onClickListeners, button7 and button14 have been removed due to explicit content.

    button1.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub

            buttonSound1.start();

        }
    });
    button2.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            buttonSound2.start();

        }
    });
    button3.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub

            buttonSound3.start();

        }
    });
    button4.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            buttonSound4.start();

        }
    });
    button5.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            buttonSound5.start();

        }
    });
    button6.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            buttonSound6.start();
        }
    });
    //Where button7 was
    button8.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            buttonSound8.start();
        }
    });
    button9.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            buttonSound9.start();
        }
    });
    button10.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            buttonSound10.start();
        }
    });
    button11.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            buttonSound11.start();
        }
    });
    button12.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            buttonSound12.start();
        }
    });
    button13.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            buttonSound13.start();

        }
    });
    //Where button14 was
4

5 に答える 5

2

コードを短くする方法はたくさんあります。ここにそれらのいくつかがあります:

  • 各ボタンには ID が "button#" として設定されているため、次のようなものを使用して、すべてのボタンをループするループを使用できます。
int resId = getResources().getIdentifier("button" + i, "id", getPackageName());
Button b=findViewById(resId);

次に、それぞれの関数を介して onClickListener を設定できます。たとえば、最初に設定された定数配列を使用して、現在のボタンで再生する正しいリソースを取得するたびに:

private static final int[] SOUNDS=new
int[]{R.raw.afternoondelight,R.raw.alrightythen,... };
  • 上記のメソッドの配列の代わりに、xml 内の各ボタンのタグを設定して、正しいサウンドを指すようにすることができます。

  • ビューを見つける代わりに、(ボタンに対してのみ機能する) onClick メソッドを XML 内に設定することができます。そのため、必要なことは、関数内でどのボタンが押されたかを確認することだけであり、そこでどのような音を出すかを選択します。

  • もう 1 つの方法は、サウンドを再生するための属性を持つカスタム ビューを作成することです。これにより、XML ですべてを行うことができます。

  • RoboGuiceAndroid Queryなどのサードパーティ ライブラリを使用します。

ところで、非常に多くのボタンがあるので、それらの場所やその他のプロパティを教えていただけませんか? おそらく、xmlファイルに非常に多くのアイテムを含める代わりに、それらを作成する際にもいくつかの最適化を行うことができます...おそらく、それらをgridViewまたはlistViewに配置して、それらの多くを作成しないようにすることができます...

また、mediaPlayer を、不要になったときに解放される単一のフィールドにすることを検討してください。その理由は、読み込み時間をなくすことと、使用するメモリを少なくすることの両方です。

于 2013-09-21T17:20:27.043 に答える
0

手始めに、クラスのプロパティとして 1 つの MediaPlayer のみを初期化し、クリック時にリソースを再生するように設定して、実際に再生する必要があります。単一の onClickListener を作成し、ボタンをクリックしてサウンド ファイルを選択することができます。それが役立つことを願っています

于 2013-09-21T16:29:20.460 に答える