0

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を使用して数値を返し、音価を変更することはできますか?

乾杯

4

3 に答える 3

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);
于 2012-09-24T15:01:19.950 に答える
0

IDを特定の値に強制することはできません。Androidでそれを行う方法はありません。Androidアセットパッケージツール(AAPT)が常に自動的に生成します。

ただし、関数内で定数から整数への「醜い」変換を非表示にすることはできます。例:keyboardIdToFrequency()

于 2012-09-24T15:00:54.507 に答える
0

を使用して、特定の値をタグとして追加できます

btn.setTag("something");

onTouchで使用します

Button btn = (Button)view;

String val = btn.Gettag();
note = Integer.Valueof(val)+ transposeOctave;
于 2012-09-24T15:11:23.097 に答える