2013-11-21 6 views
0

Я работаю над версией для Gomoku для Android. Я совершенно новый для Java в целом и даже более того для Android. Я следую книге под названием «Hello Android», где автор учит основам, делая игру в Судоку. Я следую за ним свободно, оставляя функции, не нужные для моего Гомоку. Однако при нажатии кнопки «Новая игра» появляется новое представление, и, хотя книга продолжается, как если бы она работала, то, что должно быть нарисовано, вообще не отображается для меня. Вот код, который имеет дело с материалом:Пользовательский вид Android не отображается

Mainactivity.java:

private void startGame() { 
    Log.d(TAG, "Clicked New Game"); 
    Intent intent = new Intent(this, Game.class); 
    startActivity(intent); 
} 

Game.java:

public class Game extends Activity { 
    private static final String TAG = "Game"; 
    private int board[] = new int[10 * 10]; 
    private GameView gameView; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     Log.d(TAG, "Game.onCreate called"); 
     gameView = new GameView(this); 
     gameView.requestFocus(); 
     Log.d(TAG, "Game.onCreate finished"); 
    } 
} 

GameView.java:

public class GameView extends View { 
    private static final String TAG = "Game"; 
    private float width; //Width of one tile 
    private float height; //Height of one tile 
    private final Game game; 
    Paint background = new Paint(); 
    Paint dark = new Paint(); 
    Paint light = new Paint(); 
    Paint hilite = new Paint(); 

    public GameView(Context context) { 
     super(context); 
     this.game = (Game) context; 
     setFocusable(true); 
     setFocusableInTouchMode(true); 
     Log.d(TAG, "GameView finished"); 
    } 

    @Override 
    protected void onSizeChanged(int w, int h, int oldw, int oldh) { 
     super.onSizeChanged(w, h, oldw, oldh); 
     width = w/10f; 
     height = h /10f; 
     Log.d(TAG, "onSizeChanged: width " + width + ", height " + height); 
    } 

    @Override 
    protected void onDraw(Canvas canvas) { 
     //Draw the background 
     background.setColor(getResources().getColor(R.color.background)); 
     canvas.drawRect(0, 0, getWidth(), getHeight(), background); 
     //Draw the board 
     //Define colors for grid lines 
     dark.setColor(getResources().getColor(Color.DKGRAY)); 
     light.setColor(getResources().getColor(Color.LTGRAY)); 
     hilite.setColor(getResources().getColor(Color.WHITE)); 
     for (int i = 0; i < 10; i++) { 
      Log.d(TAG, "Drawing..."); 
      canvas.drawLine(0, i * height - 1, getWidth(), i * height - 1, light); 
      canvas.drawLine(0, i * width - 1, getHeight(), i * width - 1, light); 
      canvas.drawLine(0, i * height, getWidth(), i * height, hilite); 
      canvas.drawLine(0, i * width, getHeight(), i * width, hilite); 
      canvas.drawLine(0, i * height + 1, getWidth(), i * height + 1, dark); 
      canvas.drawLine(0, i * width + 1, getHeight(), i * width + 1, dark); 
     } 

    } 
} 

Я попытался сравнивая код автора с моим и, кроме случаев, когда я не реализую функции, он, похоже, соответствует кодам. Однако Log.d (TAG, "onSizeChanged: width" + width + ", height" + height); не появляется в LogCat, поэтому я предполагаю, что эта функция просто не вызывается, и я не понимаю, почему.

ответ

0

Вы просто создаете экземпляр своего GameView, но не добавляете его в свою деятельность. Сделайте это, используя

setContentView(gameView); 

в вашем onCreate метод.

0

setContentView(gameView)onCreateGame Активность.

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    Log.d(TAG, "Game.onCreate called"); 
    gameView = new GameView(this); 
    setContentView(gameView); // missing 
    ...//rest of the code 
Смежные вопросы