2

大家好,我基本上是在做一个钢琴应用程序。经过深思熟虑,我想我已经弄清楚了大多数钢琴应用程序是如何完成的,但我被困在这里,这对于获得所有其他功能(如幻灯片、多点触控、添加键等)似乎非常重要。

是否可以在 Hand 之前知道我的可绘制按钮的尺寸?假设我基本上有两个可绘制的键按钮,钢琴键 C 和 D:

<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"

**编辑:不要这样做,它已被弃用**您也可以使用AbsoluteLayoutLinearLayout如果您想准确设置事物的显示位置,则可以使用当前布局。

于 2013-08-20T20:21:27.220 回答