質問編集履歴

2

更新依頼があったので。

2016/07/03 21:41

投稿

19776340
19776340

スコア17

test CHANGED
File without changes
test CHANGED
@@ -28,213 +28,313 @@
28
28
 
29
29
  private int flag;
30
30
 
31
- /**編集
32
-
33
- //ゲッター
31
+ //ゲッター
34
-
32
+
35
- public int getAddValue(){
33
+ public int getmCounter() {
36
-
34
+
37
- return this.addValue;
35
+ return mCounter;
38
36
 
39
37
  }
40
38
 
41
39
  //セッター
42
40
 
43
- public void setAddValue(int addvalue){
44
-
45
- this.addValue =addvalue;
46
-
47
- }
41
+ public void setmCounter(int mCounter) {
42
+
43
+ this.mCounter = mCounter;
44
+
45
+ }
46
+
47
+ /** コンストラクタ */
48
+
49
+ public SurfaceEx(Context context, AttributeSet attr) {
50
+
51
+ super(context, attr);
52
+
53
+ // 画像の読み込み
54
+
55
+ Resources res = getResources();
56
+
57
+ // SurfaceHolder の取得
58
+
59
+ SurfaceHolder holder = getHolder();
60
+
61
+ // SurfaceHolder に コールバックを設定
62
+
63
+ holder.addCallback(this);
64
+
65
+ holder.setFixedSize(getWidth(), getHeight());
66
+
67
+ // フォーカスをあてる
68
+
69
+ setFocusable(true);
70
+
71
+ //ビットマップの読み込み 0から9の画像をセット
72
+
73
+ for (int i = 0; i < 10; i++) {
74
+
75
+ bmp[i] = readBitmap(context, "s" + i);
76
+
77
+ }
78
+
79
+ }
80
+
81
+
82
+
83
+ @Override
84
+
85
+ public void surfaceCreated(SurfaceHolder holder) {
86
+
87
+ thread = new Thread(this);
88
+
89
+ thread.start();
90
+
91
+ }
92
+
93
+
94
+
95
+ @Override
96
+
97
+ public void surfaceDestroyed(SurfaceHolder holder) {
98
+
99
+ thread = null;
100
+
101
+ }
102
+
103
+
104
+
105
+ @Override
106
+
107
+ public void surfaceChanged(SurfaceHolder arg0, int arg1, int arg2, int arg3) {
108
+
109
+ // TODO 自動生成されたメソッド・スタブ
110
+
111
+ }
112
+
113
+
114
+
115
+ @Override
116
+
117
+ public void run() {
118
+
119
+ while (true && thread != null) {
120
+
121
+ // ホルダーからキャンバスの取得
122
+
123
+ Canvas canvas = getHolder().lockCanvas();
124
+
125
+ // 描画処理
126
+
127
+ draw(canvas);
128
+
129
+ // 描画内容の確定
130
+
131
+ getHolder().unlockCanvasAndPost(canvas);
132
+
133
+ }
134
+
135
+ }
136
+
137
+ /** 描画処理 */
138
+
139
+ @Override
140
+
141
+ public void draw(Canvas canvas) {
142
+
143
+ super.draw(canvas);
144
+
145
+ // 現在の状態を保存
146
+
147
+ canvas.save();
148
+
149
+ // Canvasの背景色を白で塗る
150
+
151
+ canvas.drawColor(Color.WHITE);
152
+
153
+ // 画像の描画
154
+
155
+ for(int i = mLocation.length - 1; i >= 0;i--) {
156
+
157
+ canvas.drawBitmap(bmp[0], mLocation[i].x, mLocation[i].y, null);
158
+
159
+ }
160
+
161
+
162
+
163
+ switch ((int)flag) {
164
+
165
+ case 1:
166
+
167
+ int offset = 1;
168
+
169
+ // 逆順で処理
170
+
171
+ if(mCounter < 9999){
172
+
173
+ for (int i = mLocation.length - 1; i >= 0;i--) {
174
+
175
+ int number = (mCounter / offset) % 10;
176
+
177
+ offset *= 10;
178
+
179
+ //カウントされた数字の合計を描画
180
+
181
+ canvas.drawBitmap(bmp[number], mLocation[i].x, mLocation[i].y, null);
182
+
183
+ }
184
+
185
+ } else if(mCounter > 9999){
186
+
187
+ for (int i = mLocation.length - 1; i >= 0;i--) {
188
+
189
+ int number = (9999 / offset) % 10;
190
+
191
+ offset *= 10;
192
+
193
+ //カウントする数字が9999になったら描画はそこでストップ
194
+
195
+ canvas.drawBitmap(bmp[number], mLocation[i].x, mLocation[i].y, null);
196
+
197
+ }
198
+
199
+ }
200
+
201
+ break;
202
+
203
+ }
204
+
205
+ // 現在の状態の変更
206
+
207
+ canvas.restore();
208
+
209
+ }
210
+
211
+ //ボタンを押して15ずつ数字をあげる
212
+
213
+ public void countUp() {
214
+
215
+ addValue = 15;
216
+
217
+ mCounter += addValue;
218
+
219
+ flag=1;
220
+
221
+ }
222
+
223
+ //ビットマップの読み込み
224
+
225
+ private static Bitmap readBitmap(Context context, String name) {
226
+
227
+ int resID = context.getResources().getIdentifier(
228
+
229
+ name, "drawable", context.getPackageName());
230
+
231
+ return BitmapFactory.decodeResource(
232
+
233
+ context.getResources(), resID);
234
+
235
+ }
236
+
237
+ }
238
+
239
+ ```
240
+
241
+ SurfaceViewをtest2.xmlに設定してます。
242
+
243
+ ```ここに言語を入力
244
+
245
+ test2.xml
246
+
247
+ <net.aaa.bbb.SurfaceEx
248
+
249
+ android:id="@+id/sv_main"
250
+
251
+ android:layout_width="match_parent"
252
+
253
+ android:layout_height="match_parent"/>
254
+
255
+ ```
256
+
257
+ メインクラスSurfaceViewExではprivate SurfaceEx surfaceでサブクラスを呼び出し、OnClickListenerでtest.xmlで作成したButtonを使えるようにし、Buttonを押したらsurface.countUp()でサブクラスSurfaceExにあるcountUp()に渡し、ボタンを押して数字をカウントし、その数字に合わせて数字の画像がカウントされるようになっています。
258
+
259
+ ```ここに言語を入力
260
+
261
+ public class SurfaceViewEx extends Activity {
262
+
263
+ public SurfaceEx surface;//SurfaceExクラスを取得
264
+
265
+ surface.getmCounter();//SurfaceExクラスから呼び出したがgetmCounterが赤表示でエラーになる
48
266
 
49
267
  **/
50
268
 
51
- /** コンストラクタ */
52
-
53
- public SurfaceEx(Context context, AttributeSet attr) {
54
-
55
- super(context, attr);
56
-
57
- // 画像の読み込み
58
-
59
- Resources res = getResources();
60
-
61
- // SurfaceHolder の取得
62
-
63
- SurfaceHolder holder = getHolder();
64
-
65
- // SurfaceHolder コールバックを設定
66
-
67
- holder.addCallback(this);
68
-
69
- holder.setFixedSize(getWidth(), getHeight());
70
-
71
- // フォーカスをあてる
72
-
73
- setFocusable(true);
74
-
75
- //ビットマップの読み込み 0から9の画像をセット
76
-
77
- for (int i = 0; i < 10; i++) {
78
-
79
- bmp[i] = readBitmap(context, "s" + i);
80
-
81
- }
82
-
83
- }
84
-
85
-
86
-
87
- @Override
88
-
89
- public void surfaceCreated(SurfaceHolder holder) {
90
-
91
- thread = new Thread(this);
92
-
93
- thread.start();
94
-
95
- }
96
-
97
-
98
-
99
- @Override
100
-
101
- public void surfaceDestroyed(SurfaceHolder holder) {
102
-
103
- thread = null;
104
-
105
- }
106
-
107
-
108
-
109
- @Override
110
-
111
- public void surfaceChanged(SurfaceHolder arg0, int arg1, int arg2, int arg3) {
112
-
113
- // TODO 自動生成されたメソッド・スタブ
114
-
115
- }
116
-
117
-
118
-
119
- @Override
120
-
121
- public void run() {
122
-
123
- while (true && thread != null) {
124
-
125
- // ホルダーからキャンバスの取得
126
-
127
- Canvas canvas = getHolder().lockCanvas();
128
-
129
- // 描画処理
130
-
131
- draw(canvas);
132
-
133
- // 描画内容の確定
134
-
135
- getHolder().unlockCanvasAndPost(canvas);
136
-
137
- }
138
-
139
- }
140
-
141
- /** 描画処理 */
142
-
143
- @Override
144
-
145
- public void draw(Canvas canvas) {
146
-
147
- super.draw(canvas);
148
-
149
- // 現在の状態を保存
150
-
151
- canvas.save();
152
-
153
- // Canvasの背景色を白で塗る
154
-
155
- canvas.drawColor(Color.WHITE);
156
-
157
- // 画像の描画
158
-
159
- for(int i = mLocation.length - 1; i >= 0;i--) {
160
-
161
- canvas.drawBitmap(bmp[0], mLocation[i].x, mLocation[i].y, null);
162
-
163
- }
164
-
165
-
166
-
167
- switch ((int)flag) {
168
-
169
- case 1:
170
-
171
- int offset = 1;
172
-
173
- // 逆順で処理
174
-
175
- if(mCounter < 9999){
176
-
177
- for (int i = mLocation.length - 1; i >= 0;i--) {
178
-
179
- int number = (mCounter / offset) % 10;
180
-
181
- offset *= 10;
182
-
183
- //カウントされた数字の合計を描画
184
-
185
- canvas.drawBitmap(bmp[number], mLocation[i].x, mLocation[i].y, null);
186
-
187
- }
188
-
189
- } else if(mCounter > 9999){
190
-
191
- for (int i = mLocation.length - 1; i >= 0;i--) {
192
-
193
- int number = (9999 / offset) % 10;
194
-
195
- offset *= 10;
196
-
197
- //カウントする数字が9999になったら描画はそこでストップ
198
-
199
- canvas.drawBitmap(bmp[number], mLocation[i].x, mLocation[i].y, null);
200
-
201
- }
202
-
203
- }
204
-
205
- break;
206
-
207
- }
208
-
209
- // 現在の状態の変更
210
-
211
- canvas.restore();
212
-
213
- }
214
-
215
- //ボタンを押して15ずつ数字をあげる
216
-
217
- public void countUp() {
218
-
219
- addValue = 15;
220
-
221
- mCounter += addValue;
222
-
223
- flag=1;
224
-
225
- }
226
-
227
- //ビットマップの読み込み
228
-
229
- private static Bitmap readBitmap(Context context, String name) {
230
-
231
- int resID = context.getResources().getIdentifier(
232
-
233
- name, "drawable", context.getPackageName());
234
-
235
- return BitmapFactory.decodeResource(
236
-
237
- context.getResources(), resID);
269
+ OnClickListener listener = new OnClickListener() {
270
+
271
+ @Override
272
+
273
+ public void onClick(View v) {
274
+
275
+ switch(v.getId()) {
276
+
277
+ case R.id.blue_box: // 数字を描画
278
+
279
+ surface.countUp();
280
+
281
+ break;
282
+
283
+ }
284
+
285
+ }
286
+
287
+ };
288
+
289
+
290
+
291
+ @Override
292
+
293
+ public void onCreate(Bundle savedInstanceState) {
294
+
295
+ super.onCreate(savedInstanceState);
296
+
297
+ setContentView(R.layout.test2);
298
+
299
+ //test2.xmlのSurfaceView描画範囲を取得
300
+
301
+ surface = (SurfaceEx)findViewById(R.id.sv_main);
302
+
303
+ // リスナーの設定
304
+
305
+ findViewById(R.id.blue_box).setOnClickListener(listener);
306
+
307
+ }
308
+
309
+
310
+
311
+ @Override
312
+
313
+ public void onPause() {
314
+
315
+ super.onPause();
316
+
317
+ surface.surfaceDestroyed(null);
318
+
319
+ }
320
+
321
+
322
+
323
+ @Override
324
+
325
+ protected void onSaveInstanceState(Bundle outState) {
326
+
327
+ super.onSaveInstanceState(outState);
328
+
329
+ }
330
+
331
+
332
+
333
+ @Override
334
+
335
+ protected void onRestoreInstanceState(Bundle savedInstanceState) {
336
+
337
+ super.onRestoreInstanceState(savedInstanceState);
238
338
 
239
339
  }
240
340
 
@@ -242,112 +342,4 @@
242
342
 
243
343
  ```
244
344
 
245
- SurfaceViewをtest2.xmlに設定してます。
246
-
247
- ```ここに言語を入力
248
-
249
- test2.xml
250
-
251
- <net.aaa.bbb.SurfaceEx
252
-
253
- android:id="@+id/sv_main"
254
-
255
- android:layout_width="match_parent"
256
-
257
- android:layout_height="match_parent"/>
258
-
259
- ```
260
-
261
- メインクラスSurfaceViewExではprivate SurfaceEx surfaceでサブクラスを呼び出し、OnClickListenerでtest.xmlで作成したButtonを使えるようにし、Buttonを押したらsurface.countUp()でサブクラスSurfaceExにあるcountUp()に渡し、ボタンを押して数字をカウントし、その数字に合わせて数字の画像がカウントされるようになっています。
262
-
263
- ```ここに言語を入力
264
-
265
- public class SurfaceViewEx extends Activity {
266
-
267
- /**編集
268
-
269
- //private SurfaceEx surface;//SurfaceExクラスを取得
270
-
271
- SurfaceEx surface= new SurfaceEx();//SurfaceExクラスを取得←()が赤い波線でエラー表示する
272
-
273
- surface.getmCounter();//SurfaceExクラスから呼び出したがこちらもgetmCounterが赤表示でエラーになる
274
-
275
- **/
276
-
277
- OnClickListener listener = new OnClickListener() {
278
-
279
- @Override
280
-
281
- public void onClick(View v) {
282
-
283
- switch(v.getId()) {
284
-
285
- case R.id.blue_box: // 数字を描画
286
-
287
- surface.countUp();
288
-
289
- break;
290
-
291
- }
292
-
293
- }
294
-
295
- };
296
-
297
-
298
-
299
- @Override
300
-
301
- public void onCreate(Bundle savedInstanceState) {
302
-
303
- super.onCreate(savedInstanceState);
304
-
305
- setContentView(R.layout.test2);
306
-
307
- //test2.xmlのSurfaceView描画範囲を取得
308
-
309
- surface = (SurfaceEx)findViewById(R.id.sv_main);
310
-
311
- // リスナーの設定
312
-
313
- findViewById(R.id.blue_box).setOnClickListener(listener);
314
-
315
- }
316
-
317
-
318
-
319
- @Override
320
-
321
- public void onPause() {
322
-
323
- super.onPause();
324
-
325
- surface.surfaceDestroyed(null);
326
-
327
- }
328
-
329
-
330
-
331
- @Override
332
-
333
- protected void onSaveInstanceState(Bundle outState) {
334
-
335
- super.onSaveInstanceState(outState);
336
-
337
- }
338
-
339
-
340
-
341
- @Override
342
-
343
- protected void onRestoreInstanceState(Bundle savedInstanceState) {
344
-
345
- super.onRestoreInstanceState(savedInstanceState);
346
-
347
- }
348
-
349
- }
350
-
351
- ```
352
-
353
345
  一番下にあるonSaveInstanceState、onRestoreInstanceStateは空白ですが、ここにはどのように記述したらカウントした画像の数字を画面回転時、再生成を回避して途中からカウントを続けられるようにできますでしょうか?

1

いろいろご指摘から編集しました

2016/07/03 21:41

投稿

19776340
19776340

スコア17

test CHANGED
File without changes
test CHANGED
@@ -28,7 +28,25 @@
28
28
 
29
29
  private int flag;
30
30
 
31
-
31
+ /**編集
32
+
33
+ //ゲッター
34
+
35
+ public int getAddValue(){
36
+
37
+ return this.addValue;
38
+
39
+ }
40
+
41
+ //セッター
42
+
43
+ public void setAddValue(int addvalue){
44
+
45
+ this.addValue =addvalue;
46
+
47
+ }
48
+
49
+ **/
32
50
 
33
51
  /** コンストラクタ */
34
52
 
@@ -246,7 +264,15 @@
246
264
 
247
265
  public class SurfaceViewEx extends Activity {
248
266
 
267
+ /**編集
268
+
249
- private SurfaceEx surface;//SurfaceExクラスを取得
269
+ //private SurfaceEx surface;//SurfaceExクラスを取得
270
+
271
+ SurfaceEx surface= new SurfaceEx();//SurfaceExクラスを取得←()が赤い波線でエラー表示する
272
+
273
+ surface.getmCounter();//SurfaceExクラスから呼び出したがこちらもgetmCounterが赤表示でエラーになる
274
+
275
+ **/
250
276
 
251
277
  OnClickListener listener = new OnClickListener() {
252
278