我正在製作一個簡單的應用程序來幫助我學習一些編碼基礎知識。用戶點擊一個ImageButton
發生兩件事情:在onClick中同時更改ImageButton的位置和內容
- 的
Button
圖像變爲隨機圖像。 Button
移動到屏幕上的隨機位置。
我已經想出瞭如何獨立完成這兩件事情,但是當我將兩者放在一起時onClick
但是,一次只能工作一個。
的onClick
代碼:
ImageButton button = (ImageButton) findViewById(R.id.my_button);
button.setOnClickListener(new OnClickListener() {
public void onClick (View v) {
// change button image
int imgNo = (int) (Math.random() * 9) + 1; // 9 images in the folder, start at index 1
int imgID = getResources().getIdentifier("chef" + imgNo, "drawable", getPackageName());
v.setBackgroundResource(imgID);
// move button to a random location
LinearLayout button_container = (LinearLayout) findViewById(R.id.my_window);
int x = (int) (Math.random() * (button_container.getWidth() - v.getWidth())); // might need to work out how to find if phone is landscape or portrait;
int y = (int) (Math.random() * (button_container.getHeight() - v.getHeight()));
v.layout(x, y, x + v.getWidth(), y + v.getHeight());
Toast.makeText(WhackachefActivity.this, "X: " + x + " Y: " + y + " Width: " + v.getWidth() + " Height: " + v.getHeight() + " Image: " + imgNo, Toast.LENGTH_LONG).show();
}
});
的Toast
只是在那裏證明所有的變量都正常工作。如果位置更改或圖像更改代碼被註釋掉,則另一個可以正常工作。如果圖像被隨機設置爲當前圖像(即圖像沒有變化),則隨機位置起作用,否則它將被設置爲XML中的默認位置。
作爲參考,主要XML
是:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
android:id="@+id/my_window" >
<ImageButton
android:id="@+id/my_button"
android:layout_width="100dp"
android:layout_height="100dp"
android:layout_gravity="center"
android:contentDescription="@string/description"
/>
作爲後續,兩個相關的問題:
- 我怎樣才能讓的onClick代碼運行一次當應用是第一次加載?
- 我怎樣才能讓ImageButton的大小本身自動(即以適應隨機圖像,這是稍有不同的大小,而不會拉伸它們)
感謝kcoppock - performClick()和requestLayout()解決了我的次要問題。我查了一下,不能同時做這兩件事的主要問題仍然存在。就順序而言,我想先改變圖像的位置,這樣我就可以用它的新尺寸來定位它,但我已經對它進行了兩種測試,順序似乎並不關係我的主要問題。 – Alex