2

J'utilise ce code pour obtenir la largeur et la hauteur de l'écran et envoyer mon bouton à une position aléatoire sur l'écran, mais parfois mon bouton est complètement hors écran. Je ne crois pas que la résolution que mon code m'apporte est la vraie résolution.Obtenir la largeur et la hauteur de l'écran dans Android

DisplayMetrics displayMetrics = new DisplayMetrics(); 
getWindowManager().getDefaultDisplay().getMetrics(displayMetrics); 
float height = displayMetrics.heightPixels; 
float width = displayMetrics.widthPixels; 

float maxX = width; 
float maxY = height; 
float minX = width/10; 
float minY = height/15; 

Random rand = new Random(); 

float finalX = rand.nextFloat() * abs(maxX - minX); 
float finalY = rand.nextFloat() * abs(maxY - minY); 

_height.setText("Current Y: " + String.valueOf(finalY)); 
_width.setText("Current X: " + String.valueOf(finalX)); 
max_height.setText("Max height: " + String.valueOf(height)); 
max_width.setText("Max width: " + String.valueOf(width)); 
btnClick.setX(finalX); 
btnClick.setY(finalY); 
btnClick.setVisibility(View.VISIBLE); 

Voici le XML

<?xml version="1.0" encoding="utf-8"?> 
<android.support.constraint.ConstraintLayout 
xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:app="http://schemas.android.com/apk/res-auto" 
xmlns:tools="http://schemas.android.com/tools" 
android:id="@+id/cLayout" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
android:background="@drawable/background" 
app:layout_constraintRight_toRightOf="@+id/width" 
tools:context="com.jamblatech.clicker.MainActivity" 
tools:layout_editor_absoluteY="81dp"> 

<Button 
    android:id="@+id/buttonEnd" 
    android:layout_width="363dp" 
    android:layout_height="572dp" 
    android:background="@android:color/transparent" 
    android:onClick="" 
    app:layout_constraintBottom_toBottomOf="parent" 
    app:layout_constraintHorizontal_bias="0.0" 
    app:layout_constraintLeft_toLeftOf="parent" 
    app:layout_constraintRight_toRightOf="parent" 
    app:layout_constraintTop_toTopOf="parent" 
    app:layout_constraintVertical_bias="1.0" /> 

<TextView 
    android:id="@+id/textViewCount" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="@string/zero" 
    android:textColor="@color/colorAccent" 
    android:textSize="36sp" 
    android:visibility="invisible" 
    app:layout_constraintBottom_toBottomOf="parent" 
    app:layout_constraintLeft_toLeftOf="parent" 
    app:layout_constraintRight_toRightOf="parent" 
    app:layout_constraintTop_toTopOf="parent" 
    app:layout_constraintVertical_bias="0.03" /> 

<TextView 
    android:id="@+id/timerView" 
    android:layout_width="185dp" 
    android:layout_height="41dp" 
    android:text="@string/zero" 
    android:textAlignment="center" 
    android:textSize="24sp" 
    android:visibility="invisible" 
    app:layout_constraintBottom_toBottomOf="parent" 
    app:layout_constraintHorizontal_bias="0.502" 
    app:layout_constraintLeft_toLeftOf="parent" 
    app:layout_constraintRight_toRightOf="parent" 
    app:layout_constraintTop_toTopOf="parent" 
    app:layout_constraintVertical_bias="0.937" /> 

<Button 
    android:id="@+id/buttonClick" 
    android:layout_width="100dp" 
    android:layout_height="100dp" 
    android:layout_marginTop="200dp" 
    android:background="@drawable/clickbutton" 
    android:text="@string/Click" 
    android:textSize="24sp" 
    android:visibility="invisible" 
    app:layout_constraintLeft_toLeftOf="parent" 
    app:layout_constraintRight_toRightOf="parent" 
    app:layout_constraintTop_toBottomOf="@+id/textViewCount" /> 

<Button 
    android:id="@+id/buttonReplay" 
    android:layout_width="221dp" 
    android:layout_height="103dp" 
    android:text="@string/Replay" 
    android:visibility="invisible" 
    app:layout_constraintBottom_toBottomOf="parent" 
    app:layout_constraintHorizontal_bias="0.503" 
    app:layout_constraintLeft_toLeftOf="parent" 
    app:layout_constraintRight_toRightOf="parent" 
    app:layout_constraintTop_toTopOf="parent" /> 

<Button 
    android:id="@+id/buttonBack" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="@string/Back" 
    android:visibility="invisible" 
    app:layout_constraintBottom_toBottomOf="parent" 
    app:layout_constraintLeft_toLeftOf="parent" 
    app:layout_constraintRight_toRightOf="parent" 
    app:layout_constraintTop_toTopOf="parent" 
    app:layout_constraintVertical_bias="0.674" /> 

<TextView 
    android:id="@+id/highScore" 
    android:layout_width="261dp" 
    android:layout_height="107dp" 
    android:textAlignment="center" 
    android:textColor="@android:color/holo_purple" 
    android:textSize="30sp" 
    app:layout_constraintBottom_toBottomOf="parent" 
    app:layout_constraintLeft_toLeftOf="parent" 
    app:layout_constraintRight_toRightOf="parent" 
    app:layout_constraintTop_toTopOf="parent" 
    app:layout_constraintVertical_bias="0.149" /> 

<TextView 
    android:id="@+id/height" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="@string/Test" 
    android:visibility="invisible" 
    app:layout_constraintBottom_toBottomOf="parent" 
    app:layout_constraintHorizontal_bias="0.0" 
    app:layout_constraintLeft_toLeftOf="parent" 
    app:layout_constraintRight_toRightOf="parent" 
    app:layout_constraintTop_toTopOf="parent" 
    app:layout_constraintVertical_bias="0.029" /> 

<TextView 
    android:id="@+id/width" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="@string/Test" 
    android:visibility="invisible" 
    app:layout_constraintBottom_toBottomOf="parent" 
    app:layout_constraintHorizontal_bias="0.0" 
    app:layout_constraintLeft_toLeftOf="parent" 
    app:layout_constraintRight_toRightOf="parent" 
    app:layout_constraintTop_toTopOf="parent" 
    app:layout_constraintVertical_bias="0.0" /> 

<TextView 
    android:id="@+id/maxheight" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="@string/Test" 
    android:visibility="invisible" 
    app:layout_constraintBottom_toBottomOf="parent" 
    app:layout_constraintHorizontal_bias="0.0" 
    app:layout_constraintLeft_toLeftOf="parent" 
    app:layout_constraintRight_toRightOf="parent" 
    app:layout_constraintTop_toTopOf="parent" 
    app:layout_constraintVertical_bias="0.06" /> 

<TextView 
    android:id="@+id/maxwidth" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="@string/Test" 
    android:visibility="invisible" 
    app:layout_constraintBottom_toBottomOf="parent" 
    app:layout_constraintHorizontal_bias="0.0" 
    app:layout_constraintLeft_toLeftOf="parent" 
    app:layout_constraintRight_toRightOf="parent" 
    app:layout_constraintTop_toTopOf="parent" 
    app:layout_constraintVertical_bias="0.09" /> 

<TextView 
    android:id="@+id/testTExt" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="@string/Test" 
    android:visibility="invisible" 
    app:layout_constraintBottom_toBottomOf="parent" 
    app:layout_constraintHorizontal_bias="0.0" 
    app:layout_constraintLeft_toLeftOf="parent" 
    app:layout_constraintRight_toRightOf="parent" 
    app:layout_constraintTop_toTopOf="parent" 
    app:layout_constraintVertical_bias="0.0" /> 

<TextView 
    android:id="@+id/startTimerText" 
    android:layout_width="134dp" 
    android:layout_height="95dp" 
    android:text="@string/Test_number" 
    android:textAlignment="center" 
    android:textColor="@android:color/holo_green_dark" 
    android:textSize="60sp" 
    android:visibility="visible" 
    app:layout_constraintBottom_toBottomOf="parent" 
    app:layout_constraintLeft_toLeftOf="parent" 
    app:layout_constraintRight_toRightOf="parent" 
    app:layout_constraintTop_toTopOf="parent" 
    app:layout_constraintVertical_bias="0.54" /> 
    </android.support.constraint.ConstraintLayout> 

Voici 2 photos présentant mon problème:

  1. Bouton légèrement à l'écran:
    Button slightly on-screen
  2. Bouton complètement hors écran: Button completely off-screen
+1

Pouvez-vous partager votre fichier xml aussi? – Ashwani

+0

J'ai ajouté le XML :) –

+0

Essayez de remplacer le ConstraintLayout par un RelativeLayout –

Répondre

0

Qu'est-ce que vous pouvez faire est: vous avez déjà généré de façon aléatoire x et y, x + button.getWidth() à et vérifier si elle est inférieure à screen width si oui votre x est bien lié si aucune regerenate votre x et y au hasard, si x est lié, faites-le pour y et vérifiez y + button.getHeight() est inférieur à screen height cela fera l'affaire.