有很多onTouchListener是对的吗?

时间:2016-10-02 19:48:03

标签: java android

我正在开发一个钢琴应用程序,它不是最好的,但它是一个开始。

我使用下面的代码来播放声音并通过触摸事件更改按钮的图像。

        C4.setOnTouchListener(new View.OnTouchListener() {
        @Override
        public boolean onTouch(View v, MotionEvent event) {
            switch(event.getAction()) {

                case MotionEvent.ACTION_DOWN:
                    // PRESSED
                    if (Sustain == "false" ) {

                        streamI25 = sp.play(SC4, Volume, Volume, 0, 0, 1);
                        C4.setBackgroundResource(R.drawable.whitekey1cilicked);
                    }

                    else {

                        sp.play(SC4, Volume, Volume, 0, 0, 1);
                        C4.setBackgroundResource(R.drawable.whitekey1cilicked);
                    }

                    // just in case somthings happend
                    final Handler handler2 = new Handler();
                    handler2.postDelayed(new Runnable() {
                        @Override
                        public void run() {
                            //Do something after 100ms
                            C4.setBackgroundResource(R.drawable.whitekey1);
                        }
                    }, keyUpTime);


                    return true; // if you want to handle the touch event
                case MotionEvent.ACTION_UP:
                    // RELEASED


                    C4.setBackgroundResource(R.drawable.whitekey1);

                    final Handler handler = new Handler();
                    handler.postDelayed(new Runnable() {
                        @Override
                        public void run() {
                            //Do something after 100ms
                            sp.pause(streamI25);

                        }
                    }, releaseTime);


                    return true; // if you want to handle the touch event
            }
            return false;
        }
    });

是不是?为钢琴中的每一个键编写所有这些代码并不愚蠢吗?

我可以在OnClick方法中为我的所有按钮使用几行代码,但我需要onTouch的事件。写72 onTouchListener是否正确?

2 个答案:

答案 0 :(得分:1)

您最好在活动中使用OnTouchListener或使用implements OnTouchListener扩展的其他处理类。您的视图可以有一个您在方法中分析的标记(视图作为参数传递给函数调用)。

你可以写

class MyActivity extends Activity implements View.OnTouchListener

然后

C4.setTag("C4"); // or by XML
C4.setOnTouchListener(this);

并在onTouch中更改view而不是C4,并根据标记选择声音。

答案 1 :(得分:1)

多次重复完全相同的代码总是一个坏主意。这里的一个选项是创建一个命名类,例如添加PianoKeyTouchListener,其中包含此事件处理代码。