你好,我基本上是在做一個鋼琴應用程序。經過深思熟慮,我想我已經想出了大多數鋼琴應用程序是如何完成的,並且我被困在這裏,這對於獲得幻燈片,多點觸控,添加按鍵等所有其他功能似乎非常重要。如何提前獲取我的Button的尺寸?
是否可以在手之前知道我的可繪製按鈕的尺寸? 說我有兩種基本繪製鍵按鈕,鋼琴鍵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>
但我想知道尺寸或創建按鈕的位置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,因爲圖像需要時間加載,因此代碼無法檢索它。
謝謝你們。順便說一句,我是超級noob。我很抱歉如果我錯過了什麼。
你不需要事先知道如何搜索'GlobalLayoutListener'。對這些問題的一些回答也會導致你除了onCreate()之外的其他生命週期中的地方,你可以做這些事情秒。在onCreate()中,佈局尚未構建,維度將始終爲零。 – Simon
此文檔可能會有所幫助:http://developer.android.com/reference/android/view/ViewTreeObserver.html – kabuko
在'Button'本身上使用'setOnTouchListener(OnTouchListener)'有什麼問題?爲什麼要在上面畫一個區域? – Vikram