J'ai lu plusieurs threads ici qui expliquent comment obtenir la taille de la vue lors de l'exécution, mais aucune des solutions n'a fonctionné pour moi.Obtenir la hauteur et la largeur de surface de vue lors de l'implémentation de runnable
GameScreen.java
public class GameScreen extends AppCompatActivity{
// Declare an instance of SnakeView
GameView snakeView;
SurfaceHolder surface;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_game_screen);
snakeView = (GameView) findViewById(R.id.GameView);
surface = snakeView.getHolder();
snakeView = new GameView(this, surface);
}
où Gameview est une classe de vue surfaceview extension. Ce qui suit est une version simplifiée de mon code détaillant le problème. J'ai omis la méthode run() et beaucoup d'autres pour éviter la confusion.
GameView.java
public class GameView extends SurfaceView implements Runnable {
public GameView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
init();
}
public GameView(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}
public GameView(Context context, SurfaceHolder surfaceholder) {
super(context);
init();
m_context = context;
// Initialize the drawing objects
m_Holder = surfaceholder;
m_Paint = new Paint();
}
private void init(){
surfaceHolder = getHolder();
surfaceHolder.addCallback(new SurfaceHolder.Callback() {
@Override
public void surfaceCreated(SurfaceHolder holder) {
}
@Override
public void surfaceChanged(SurfaceHolder holder,
int format, int width, int height) {
m_Screenheight = height;
m_Screenwidth = width;
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
// TODO Auto-generated method stub
}
});
}
Cependant appeler getWidth()
et getHeight()
provoque l'application crash.
Je sais que vous devez attendre la vue pour mettre en page mais j'ai essayé toutes les suggestions mais j'ai essayé toutes les suggestions d'autres discussions en vain. Mon principal manque de compréhension vient du fait que j'utilise les outils Runnable dans ma classe personnalisée, donc je ne sais pas où je suis autorisé à utiliser getWidth ou une méthode similaire. Je suis nouveau à android en général alors s'il vous plaît soyez explicite dans votre solution.
EDIT:
Je signale que je suis en utilisant la largeur et la hauteur pour former une grille pour dessiner dans le surfaceview.
EDIT 2:
Voir le code révisé.
vous avez 'surfaceChanged()' méthode qui transmet les données que vous voulez – pskink
Alors dois-je utiliser getWidth() dans surfaceChanged()? –
'surfaceChanged' prend 4 paramètres, utilisez-les – pskink