我正在为Android设计键盘。 我刚刚通过在MainActivity中实现View.OnTouchListener来学习这种在onCreate方法中定义按钮的简洁方法:
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
defineButtons();
keyC.setOnTouchListener(this);
//etc..
}
然后:
private void defineButtons()
{
keyC = (Button) findViewById(R.id.c);
//etc..
}
然后我会定义当这种方法触摸按钮时会发生什么:
public boolean onTouch(View view, MotionEvent motion)
{
int note = 0;
switch(view.getId())
{
case R.id.c: /** Note C*/
{
note = 60 + transposeOctave;
motionTracker(view, motion, note);
}
break;
//etc...
}
这个最后一个方法必须分别对每个按钮重复,这看起来很难看。 我可以使用Id返回一个数值来修改我的音符值吗?
干杯
答案 0 :(得分:1)
您的密钥是用XML定义的吗?如果是这样,我只需为每个具有正确数值的tag
添加android:tag="1"
,如下所示:
int note = 0;
int tagValue = 0;
//Tags in XML are always strings
String tag = (String)view.getTag();
//Parse it to an integer
tagValue = Integer.parseInt(tag);
note = tagValue + transposeOctave;
motionTracker(view, motion, note);
然后,在您的代码中,您可以简单地执行此操作:
{{1}}
答案 1 :(得分:0)
您无法强制ID为特定值。在Android中无法做到这一点,Android资产包装工具(AAPT)将始终自动为您生成它们。
但你仍然可以隐藏函数中从常量到整数的“丑陋”转换。例如:keyboardIdToFrequency()
答案 2 :(得分:0)
您可以使用
将特定值添加为Tagbtn.setTag("something");
并在onTouch中使用
Button btn = (Button)view;
String val = btn.Gettag();
note = Integer.Valueof(val)+ transposeOctave;