大家好我基本上是在做钢琴应用。经过深思熟虑后,我想我已经弄清楚大多数钢琴应用程序是如何完成的,而且我被困在这里,这对于获得所有其他功能似乎非常重要,例如幻灯片,多点触控,添加键等。
在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>
但是我想知道Button的尺寸或位置 BEFOREHAND ,这样我就可以在该按钮的顶部绘制一个区域,并将该区域用于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,因为图像需要时间加载,因此代码无法检索它。
谢谢你们。顺便说一句,我是超级菜鸟。如果我错过了什么,我道歉。
答案 0 :(得分:0)
您可以在布局中设置按钮的宽度/高度 - 而不是仅使用wrap_content
ex:android:layout_width="100dp"
**编辑:不要这样做已被弃用**如果您想准确设置出现的位置,您也可以使用AbsoluteLayout(而不是当前的LinearLayout
。