我正在开发钢琴应用程序,这不是最好的应用程序,但这是一个开始。
我正在使用以下代码播放声音并通过触摸事件更改按钮的图像。
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/