0

我有一个小问题,如图所示,我无法恢复我想要的屏幕尺寸,我有点迷茫......(我正在学习)

http://imageshack.us/f/708/erreurtaillepong4.png/

http://imageshack.us/f/708/erreurtaillepong5.png/

我需要有屏幕的宽度和高度

请帮忙

编辑 1

这是我的代码:

package com.salocincreations.pong;

import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.Rect;

public class GameState {

    //Largeur et hauteur de l'écran
    int _screenWidth = TailleEcran.Measuredwidth;
    int _screenHeight = TailleEcran.Measuredheight;


    //La balle
    final int _ballSize = 10;
    int _ballX = _screenWidth/2;    int _ballY = _screenHeight/2;
    int _ballVelocityX = 2;     int _ballVelocityY = 4;

    //Les barres
    final int _batLength = 75;  final int _batHeight = 10;
    int _topBatX = (_screenWidth/2) - (_batLength / 2);
    final int _topBatY = 10;
    int _bottomBatX = (_screenWidth/2) - (_batLength / 2);  
    final int _bottomBatY = _screenHeight - 20;

    public GameState()
    {
    }

    //The update method
    public void update() {

    _ballX += _ballVelocityX;
    _ballY += _ballVelocityY;

    //DEATH!
    if(_ballY > _bottomBatY + 10 || _ballY < 0)         
    {_ballX = 100;  _ballY = 100;}//Collisions with the goals

    if(_ballX > _screenWidth || _ballX < 0)
                _ballVelocityX *= -1;   //Collisions with the sides     

    if(_ballX > _topBatX && _ballX < _topBatX+_batLength && _ballY - 16 < _topBatY)         
                     _ballVelocityY *= -1;  //Collisions with the bats      

    if(_ballX > _bottomBatX && _ballX < _bottomBatX+_batLength 
                    && _ballY + 16 > _bottomBatY)
                           _ballVelocityY *= -1;
    }

    public boolean surfaceTouched(float posX, float posY) {
        _topBatX = (int) posX;
        _bottomBatX = (int) posX;

        return true;
        }


    //the draw method
    public void draw(Canvas canvas, Paint paint) {

    //Clear the screen
    canvas.drawRGB(0, 0, 0);

    //set the colour
    paint.setARGB(200, 0, 200, 700);

    //draw the ball
    canvas.drawRect(new Rect(_ballX,_ballY,_ballX + _ballSize,_ballY + _ballSize),
                                 paint);

    //draw the bats
    canvas.drawRect(new Rect(_topBatX, _topBatY, _topBatX + _batLength,
                                          _topBatY + _batHeight), paint); //top bat
    canvas.drawRect(new Rect(_bottomBatX, _bottomBatY, _bottomBatX + _batLength, 
                                          _bottomBatY + _batHeight), paint); //bottom bat

        // Nous allons dessiner nos points par rapport à la résolution de l'écran
        int iWidth = canvas.getWidth(); // Largeur
        int iHeight = canvas.getHeight(); // Hauteur

        // Affecter une couleur de manière aléatoire
            paint.setARGB(255, 500, 500, 500);
            // Définir l'épaisseur du segment
            paint.setStrokeWidth (2);
            // Puis dessiner nos points dans le cavenas
            canvas.drawLine(0, iHeight/2, iWidth, iHeight/2, paint);    
            canvas.drawCircle(iWidth/2, iHeight/2, 50, paint);
        }            
    }

public class TailleEcran extends Activity {


    int Measuredwidth;
    int Measuredheight;
    Point size = new Point();
    WindowManager w = getWindowManager();{

      if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB_MR2){
            w.getDefaultDisplay().getSize(size);

            Measuredwidth = size.x;
            Measuredheight = size.y; 
          }else{
            Display d = w.getDefaultDisplay(); 
            Measuredwidth = d.getWidth(); 
            Measuredheight = d.getHeight(); 
          }}}

在行

int _screenWidth = TailleEcran.Measuredwidth;
int _screenHeight = TailleEcran.Measuredheight;

错误说:无法对非静态字段 TailleEcran.Measuredwidth 进行静态引用

无法对非静态字段 TailleEcran.Measuredheight 进行静态引用

编辑 2

那么,anthropomo,我需要写吗?

        public class GameState {
        // declare variables above here without assignments
        Display display = ((WindowManager)
            context.getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay();
        DisplayMetrics metrics = new DisplayMetrics();
        display.getMetrics(metrics);

        int pixHeight = metrics.heightPixels;
        int pixWidth = metrics.widthPixels;
    // dp numbers:
        float density  = context.getResources().getDisplayMetrics().density;
        float dpHeight = pixHeight / density;
        float dpWidth  = pixWidth / density;
public GameState(Context context){
//all the rest of my class
    }

}
4

3 回答 3

0

您可以像这样使用Context.getResources()Resources.getDisplayMetrics

DisplayMetrics displayMetrics = getResources().getDisplayMetrics();

然后你会有

displayMetrics.widthPixels;  // width
displayMetrics.heightPixels; // height
于 2013-03-13T16:09:00.123 回答
0

为了在 <13 中兼容且未弃用:

    Display display = ((WindowManager)
        context.getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay();
    DisplayMetrics metrics = new DisplayMetrics();
    display.getMetrics(metrics);

    int pixHeight = metrics.heightPixels;
    int pixWidth = metrics.widthPixels;
// dp numbers:
    float density  = context.getResources().getDisplayMetrics().density;
    float dpHeight = pixHeight / density;
    float dpWidth  = pixWidth / density;

编辑:

您会遇到错误,display.getMetrics(metrics);因为只有声明才能发生在类中的方法之外。所有这些代码都应该在一个方法中,并且假设 GameState 不是真正的 Activity,这些东西应该在构造函数中。像这样的东西:

public class GameState {
    // declare variables above here without assignments

    public GameState(Context context){
        // everything above, but save the variables outside of the constructor
    }

}

然后在使用GameState的Activity中,做gameState = new GameState(this);

于 2013-03-13T16:17:42.790 回答
0

尝试这个

Display display = getWindowManager().getDefaultDisplay();
Point size = new Point();
display.getSize(size);
int width = size.x;
int height = size.y;

在 13 之前的 API 上,您可以使用:

Display display = getWindowManager().getDefaultDisplay(); 
int width = display.getWidth();  // deprecated
int height = display.getHeight();  // deprecated
于 2013-03-13T16:06:34.103 回答