Androidアプリ実行エラー2
Androidアプリ実行エラー
ソースはこちらです。
package com.example.sudoku;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.Rect;
import android.graphics.Paint.FontMetrics;
import android.graphics.Paint.Style;
import android.util.Log;
import android.view.KeyEvent;
import android.view.MotionEvent;
import android.view.View;
import android.view.animation.AnimationUtils;
public class PuzzleView extends View {
private static final String TAG = "Sudoku";
private float width;
private float height;
private int selX;
private int selY;
private final Rect selRect = new Rect();
private final Game game;
public PuzzleView(Context context) {
super(context);
this.game = (Game) context;
setFocusable(true);
setFocusableInTouchMode(true);
}
@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
width = w / 9f;
height = h / 9f;
getRect(selX, selY, selRect);
Log.d(TAG, "onSizeChanged: width " + width + ", height" + height);
super.onSizeChanged(w, h, oldw, oldh);
}
@Override
protected void onDraw(Canvas canvas) {
//背景色の描画
Paint background = new Paint();
background.setColor(getResources().getColor(
R.color.puzzle_background));
canvas.drawRect(0, 0, getWidth(), getHeight(), background);
//盤面を描画する
//枠線の色を定義する
Paint dark = new Paint();
dark.setColor(getResources().getColor(R.color.puzzle_dark));
Paint hilite = new Paint();
hilite.setColor(getResources().getColor(R.color.puzzle_hilite));
Paint light = new Paint();
light.setColor(getResources().getColor(R.color.puzzle_light));
//マス目を区切る線
for (int i = 0; i < 9; i++) {
canvas.drawLine(0, i * height, getWidth(), i * height, light);
canvas.drawLine(0, i * height + 1, getWidth(), i * height + 1, hilite);
canvas.drawLine(i * width, 0, i * width, getHeight(), light);
canvas.drawLine(i * width + 1, 0, i * width + 1, getHeight(), hilite);
}
//3*3を区切る線
for (int i = 0; i < 9; i++) {
if(i % 3 != 0)
continue;
canvas.drawLine(0, i * height, getWidth(), i * height, dark);
canvas.drawLine(0, i * height + 1, getWidth(), i * height + 1, hilite);
canvas.drawLine(i * width, 0, i * width, getHeight(), dark);
canvas.drawLine(i * width + 1, 0, i * width + 1, getHeight(), hilite);
}
//数値を描画する
Paint foreground = new Paint(Paint.ANTI_ALIAS_FLAG);
foreground.setColor(getResources().getColor(R.color.puzzle_foreground));
foreground.setStyle(Style.FILL);
foreground.setTextSize(height * 0.75f);
foreground.setTextScaleX(width / height);
foreground.setTextAlign(Paint.Align.CENTER);
//マスの中央に数字を描く
FontMetrics fm = foreground.getFontMetrics();
//x軸方向でセンタリングする。中央のx座標に揃える
float x = width / 2;
//
float y = height / 2 - (fm.ascent + fm.descent) / 2;
for (int i = 0; i < 9; i++) {
for (int j = 0; j < 9; j++) {
canvas.drawText(this.game.getTileString(i, j),i
* width + x, j * height + y, foreground);
}
}
//ヒントを描画する
//選択されたマスを描画する
}
private void getRect(int x, int y, Rect rect) {
rect.set((int) (x * width), (int) (y * height),
(int) (x * width + width), (int) (y * height + height));
}
}
ログはこちらです。
ご回答をよろしくお願いします。
http://okwave.jp/qa/q8272113.html
お礼
mpro-gramさん、回答有難うございました。 何とかうまく実行出来ました。 プログラムを見ながら改めて、再度疑問が湧いてきましたので、宜しくお願いします。 実行の最後で「re_img」がBufferedImageとして保存することは出来るのですが、この時のサイズ は私の書いたプログラムでは、「int re_width=300 , int re_height=300」と設定していますが、 どのサイズで保存されるのでしょうか。 また、「re_g.drawImage(img,・・・・・・,this);」でサイズを指定してBufferedImageを描 画していますが、この時に「int re_width=300 , int re_height=300」との関係はどのような 関係にあるのでしょうか。 実行途中で作成される「bu_g」はどのようなファイルでしょうか、「re_img」との関係はどのような 者でしょうか。 質問ばかりで申し訳ありませんが、宜しくお願いします。