2

こんにちはみんな私は基本的にピアノアプリをやっています。よく考えた後、ほとんどのピアノアプリがどのように行われるかを理解したと思いますが、ここで立ち往生しています。これは、スライド、マルチタッチ、キーの追加など、他のすべての機能を取得するために非常に重要であるようです.

ドローアブル ボタンのサイズを Hand の前に知ることはできますか? 基本的に、ピアノのキー C と D の 2 つのドローアブル キー ボタンがあるとします。

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="horizontal"
android:gravity="bottom" >

<Button
    android:id="@+id/ckey"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:background="@drawable/keybutton" />

<Button
    android:id="@+id/dkey"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:background="@drawable/keybutton" />

ピアノ アプリ (白鍵) の場合、どちらも同じセレクターを使用します。

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item 
    android:drawable="@drawable/key"
    android:state_pressed="true"/>

<item 
    android:drawable="@drawable/key_pressed"/>
</selector>

しかし、そのボタンの上に領域を描画し、その領域をonTouchListenerに使用できるように、作成されたボタン寸法または場所を事前に知りたいと思います。onTouch を使用するには、そのリージョンが必要です。

@Override
public boolean onTouch(View v, MotionEvent event) {

int numberOfKeys = 2;
Region[] keyBoard = new Region[2]; //for 2 White Piano Keys
Integer pointerIndex = event.getActionIndex();
Float x = event.getX(pointerIndex);
Float y = event.getY(pointerIndex);

for(int j=0;j<1;j++){
    if(this.keyBoard[j].contains(x.intValue(),y.intValue())){
           //play corresponding sound

        }

}

だから私の画像の寸法を知っている: key.png と key_pressed.png と画面の幅と高さ、そしておそらく私が知らない他のパラメータ。アプリを起動する前に、ボタンの寸法や座標、位置を事前に知ることはできますか?

それ以外の場合、どうすれば座標を取得できますか? getTop() と getLeft() は、画像の読み込みに時間がかかるため 0 を返すため、適切なオプションではないようです。したがって、コードは画像を取得できません。

みんなありがとう。ちなみに私は超初心者です。何か見落としがありましたら、お詫び申し上げます。

4

1 に答える 1

0

レイアウトでボタンの幅/高さを設定できます-使用するだけではありませんwrap_content

元:android:layout_width="100dp"

**編集:これは非推奨です**これを行わないでください**物事が表示される場所を正確に設定したい場合は、現在のものではなく、 AbsoluteLayoutを使用することもできます。LinearLayout

于 2013-08-20T20:21:27.220 に答える