Je fais une application simple pour m'aider à apprendre quelques fondamentaux de codage. L'utilisateur clique sur un ImageButton
et deux choses se produisent:Changer la position de ImageButton et le contenu en même temps dans onClick
- Les
Button
image change à une image aléatoire. LeButton
se déplace vers un emplacement aléatoire sur l'écran.
J'ai compris comment faire ces deux choses dans l'isolement, mais quand je mets les deux ensemble dans un onClick
cependant, une seule travaillerai à la fois.
Le code 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();
}
});
Le Toast
est juste là pour prouver toutes les variables fonctionnent correctement. Si le changement d'emplacement ou le code de changement d'image est mis en commentaire, l'autre fonctionne correctement. Si l'image est définie de manière aléatoire sur l'image en cours (c'est-à-dire sans changement d'image), alors l'emplacement aléatoire fonctionne, mais autrement, il est défini à l'emplacement par défaut dans le XML.
Pour référence, le principal XML
est:
<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"
/>
En tant que suivi, deux questions connexes:
- Comment puis-je faire fonctionner de code onClick une fois lorsque la L'application est d'abord chargée?
- Comment puis-je faire la taille ImageButton lui-même automatiquement (c.-à adapter la taille des images aléatoires, qui sont légèrement différents, sans les étirer)
Merci kcoppock - PerformClick() et requestLayout() résoudre mes problèmes secondaires. J'ai vérifié et le principal problème de ne pas pouvoir faire les deux à la fois est toujours là. En termes de commande, je voudrais d'abord changer l'image pour pouvoir la positionner en utilisant ses nouvelles dimensions, mais je l'ai testé dans les deux sens et l'ordre ne semble pas avoir d'importance en termes de problème principal. – Alex