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

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

        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是否正确?

最佳答案

您最好在您的活动或使用implements OnTouchListener扩展的另一个处理类中实现OnTouchListener。您的视图可以包含一个标签,然后在您的方法中进行分析(该视图作为参数传递给函数调用)。

你可以写

class MyActivity extends Activity implements View.OnTouchListener


然后

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


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

关于java - 拥有许多onTouchListener是对的吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39821006/

10-11 20:02