質問編集履歴

2

コード書き直し

2019/02/13 20:43

投稿

tokutoku453
tokutoku453

スコア13

test CHANGED
File without changes
test CHANGED
@@ -4,35 +4,35 @@
4
4
 
5
5
  2月14日追記
6
6
 
7
- こちらアンサーの追記などを元にコードを編集しなおしましたが、画像保存のsaveImageの部分がなぜかエラーを起こしてアプリを起動することができません
7
+ こちらアンサーの追記などを元にコードを編集しなおしましたが、bitmap保存には至りませんでした。
8
8
 
9
9
 
10
10
 
11
11
  ```MainActivity
12
12
 
13
- import android.graphics.Bitmap;
13
+ import android.app.Activity;
14
14
 
15
15
  import android.graphics.Color;
16
16
 
17
- import android.graphics.drawable.BitmapDrawable;
18
-
19
17
  import android.os.Bundle;
20
18
 
19
+ import android.os.CpuUsageInfo;
20
+
21
21
  import android.support.v7.app.AppCompatActivity;
22
22
 
23
- import android.util.Log;
24
-
25
23
  import android.view.View;
26
24
 
27
25
  import android.view.Window;
28
26
 
29
27
  import android.widget.Button;
30
28
 
29
+ import android.widget.CompoundButton;
30
+
31
+ import android.widget.Toast;
32
+
31
33
  import android.widget.ImageButton;
32
34
 
33
- import android.widget.ImageView;
35
+
34
-
35
- import android.widget.Toast;
36
36
 
37
37
 
38
38
 
@@ -48,8 +48,6 @@
48
48
 
49
49
  Button hutosa1_button,hutosa2_button,kukei_button;
50
50
 
51
- Button capture_all;
52
-
53
51
 
54
52
 
55
53
 
@@ -70,374 +68,294 @@
70
68
 
71
69
 
72
70
 
73
- Button capture_all = findViewById(R.id.capture_all);
74
-
75
- capture_all.setOnClickListener(new View.OnClickListener() {
76
-
77
- @Override
78
-
79
- public void onClick(View v) {
80
-
81
- // 画像保存
82
-
83
- saveImage();
84
-
85
- }
86
-
87
- });
88
-
89
-
90
-
91
- private void saveImage() {
92
-
93
-
94
-
95
- // イメージビューからビットマップ保持
96
-
97
- ImageView sampleDrawingView = (ImageView) findViewById(R.id.image);
98
-
99
- Bitmap sampleImage = ((BitmapDrawable) sampleDrawingView.getDrawable()).getBitmap();
100
-
101
-
102
-
103
- // ビットマップを SDカードに保存
104
-
105
- ImageManager imageManager = new ImageManager(this);
106
-
107
- try {
108
-
109
- // 画像保存実行
110
-
111
- String albumName = "Save image sample";
112
-
113
- imageManager.save(sampleImage, albumName);
114
-
115
- } catch (Error e) {
116
-
117
- Log.e("MainActivity", "onCreate: " + e);
118
-
119
-
120
-
121
- // 画像の保存失敗メッセージ表示
122
-
123
- Toast.makeText(MainActivity.this, "SDカードに保存できませんでした", Toast.LENGTH_SHORT).show();
124
-
125
- } finally {
126
-
127
- // 画像の保存完了メッセージ表示
128
-
129
- Toast.makeText(MainActivity.this, "SDカードに保存しました", Toast.LENGTH_SHORT).show();
130
-
131
-
132
-
133
- }
71
+
72
+
73
+ //線の色指定
74
+
75
+ blue_button= findViewById(R.id.blue_button);
76
+
77
+ red_button= findViewById(R.id.red_button);
78
+
79
+ yellow_button= findViewById(R.id.yellow_button) ;
80
+
81
+ black_button= findViewById(R.id.black_button);
82
+
83
+ kesigomu_button= findViewById(R.id.kesigomu_button);
84
+
85
+ cyan_button= findViewById(R.id.cyan_button);
86
+
87
+ gray_button= findViewById(R.id.gray_button);
88
+
89
+ green_button= findViewById(R.id.green_button);
90
+
91
+ orange_button= findViewById(R.id.orange_button);
92
+
93
+ pink_button= findViewById(R.id.pink_button);
94
+
95
+ purple_button= findViewById(R.id.purple_button);
96
+
97
+ kimidori_button= findViewById(R.id.kimidori_button);
98
+
99
+ mizuiro_button= findViewById(R.id.mizuiro_button);
100
+
101
+ hadairo_button= findViewById(R.id.hadairo_button);
102
+
103
+
104
+
105
+
106
+
107
+ //太さ指定
108
+
109
+ hutosa1_button= findViewById(R.id.hutosa1_button);
110
+
111
+ hutosa2_button= findViewById(R.id.hutosa2_button);
112
+
113
+ //矩形処理
114
+
115
+ kukei_button= findViewById(R.id.kukei_button);
116
+
117
+
118
+
119
+
120
+
121
+ blue_button.setOnClickListener(this);
122
+
123
+ red_button.setOnClickListener(this);
124
+
125
+ yellow_button.setOnClickListener(this);
126
+
127
+ black_button.setOnClickListener(this);
128
+
129
+ kesigomu_button.setOnClickListener(this);
130
+
131
+ cyan_button.setOnClickListener(this);
132
+
133
+ gray_button.setOnClickListener(this);
134
+
135
+ green_button.setOnClickListener(this);
136
+
137
+ orange_button.setOnClickListener(this);
138
+
139
+ pink_button.setOnClickListener(this);
140
+
141
+ purple_button.setOnClickListener(this);
142
+
143
+ kimidori_button.setOnClickListener(this);
144
+
145
+ mizuiro_button.setOnClickListener(this);
146
+
147
+ hadairo_button.setOnClickListener(this);
148
+
149
+
150
+
151
+ hutosa1_button.setOnClickListener(this);
152
+
153
+ hutosa2_button.setOnClickListener(this);
154
+
155
+ kukei_button.setOnClickListener(this);
156
+
157
+
158
+
159
+
160
+
161
+
162
+
163
+
164
+
165
+
166
+
167
+ this.drawingView = findViewById(R.id.drawing_view);
168
+
169
+
170
+
171
+ findViewById(R.id.deletebutton).setOnClickListener(deleteDrawing);
172
+
173
+
174
+
175
+ }
176
+
177
+ View.OnClickListener deleteDrawing = new View.OnClickListener(){
178
+
179
+ @Override
180
+
181
+ public void onClick(View view){
182
+
183
+ drawingView.delete();
134
184
 
135
185
  }
136
186
 
137
-
138
-
139
-
140
-
141
-
142
-
143
- //線の色指定
144
-
145
- blue_button= findViewById(R.id.blue_button);
146
-
147
- red_button= findViewById(R.id.red_button);
148
-
149
- yellow_button= findViewById(R.id.yellow_button) ;
150
-
151
- black_button= findViewById(R.id.black_button);
152
-
153
- kesigomu_button= findViewById(R.id.kesigomu_button);
154
-
155
- cyan_button= findViewById(R.id.cyan_button);
156
-
157
- gray_button= findViewById(R.id.gray_button);
158
-
159
- green_button= findViewById(R.id.green_button);
160
-
161
- orange_button= findViewById(R.id.orange_button);
162
-
163
- pink_button= findViewById(R.id.pink_button);
164
-
165
- purple_button= findViewById(R.id.purple_button);
166
-
167
- kimidori_button= findViewById(R.id.kimidori_button);
168
-
169
- mizuiro_button= findViewById(R.id.mizuiro_button);
170
-
171
- hadairo_button= findViewById(R.id.hadairo_button);
172
-
173
-
174
-
175
-
176
-
177
- //線の太さ指定
178
-
179
- hutosa1_button= findViewById(R.id.hutosa1_button);
180
-
181
- hutosa2_button= findViewById(R.id.hutosa2_button);
182
-
183
- //矩形処理
184
-
185
- kukei_button= findViewById(R.id.kukei_button);
186
-
187
-
188
-
189
-
190
-
191
-
192
-
193
-
194
-
195
- blue_button.setOnClickListener(this);
196
-
197
- red_button.setOnClickListener(this);
198
-
199
- yellow_button.setOnClickListener(this);
200
-
201
- black_button.setOnClickListener(this);
202
-
203
- kesigomu_button.setOnClickListener(this);
204
-
205
- cyan_button.setOnClickListener(this);
206
-
207
- gray_button.setOnClickListener(this);
208
-
209
- green_button.setOnClickListener(this);
210
-
211
- orange_button.setOnClickListener(this);
212
-
213
- pink_button.setOnClickListener(this);
214
-
215
- purple_button.setOnClickListener(this);
216
-
217
- kimidori_button.setOnClickListener(this);
218
-
219
- mizuiro_button.setOnClickListener(this);
220
-
221
- hadairo_button.setOnClickListener(this);
222
-
223
-
224
-
225
- hutosa1_button.setOnClickListener(this);
226
-
227
- hutosa2_button.setOnClickListener(this);
228
-
229
- kukei_button.setOnClickListener(this);
230
-
231
-
232
-
233
-
234
-
235
-
236
-
237
-
238
-
239
-
240
-
241
- this.drawingView = findViewById(R.id.drawing_view);
242
-
243
-
244
-
245
- findViewById(R.id.deletebutton).setOnClickListener(deleteDrawing);
246
-
247
-
187
+ };
188
+
189
+
190
+
191
+
192
+
193
+ public void onClick(View v){
194
+
195
+ switch(v.getId()){
196
+
197
+ //線の色指定
198
+
199
+ case R.id.blue_button:
200
+
201
+ drawingView.setPen(Color.BLUE);
202
+
203
+ Toast.makeText(this,"blue",Toast.LENGTH_SHORT).show();
204
+
205
+ break;
206
+
207
+ case R.id.red_button:
208
+
209
+ drawingView.setPen(Color.RED);
210
+
211
+ Toast.makeText(this,"red",Toast.LENGTH_SHORT).show();
212
+
213
+ break;
214
+
215
+ case R.id.yellow_button:
216
+
217
+ drawingView.setPen(Color.YELLOW);
218
+
219
+ Toast.makeText(this,"yellow",Toast.LENGTH_SHORT).show();
220
+
221
+ break;
222
+
223
+ case R.id.black_button:
224
+
225
+ drawingView.setPen(Color.BLACK);
226
+
227
+ Toast.makeText(this,"black",Toast.LENGTH_SHORT).show();
228
+
229
+ break;
230
+
231
+ case R.id.kesigomu_button:
232
+
233
+ drawingView.setPen(Color.WHITE);
234
+
235
+ drawingView.setStrokeWidth(40);
236
+
237
+ Toast.makeText(this,"消しゴム",Toast.LENGTH_SHORT).show();
238
+
239
+ break;
240
+
241
+ case R.id.cyan_button:
242
+
243
+ drawingView.setPen(Color.CYAN);
244
+
245
+ Toast.makeText(this,"Cyan",Toast.LENGTH_SHORT).show();
246
+
247
+ break;
248
+
249
+ case R.id.gray_button:
250
+
251
+ drawingView.setPen(Color.GRAY);
252
+
253
+ Toast.makeText(this,"gray",Toast.LENGTH_SHORT).show();
254
+
255
+ break;
256
+
257
+ case R.id.green_button:
258
+
259
+ drawingView.setPen(Color.GREEN);
260
+
261
+ Toast.makeText(this,"green",Toast.LENGTH_SHORT).show();
262
+
263
+ break;
264
+
265
+ case R.id.orange_button:
266
+
267
+ drawingView.setPen(Color.rgb(255,165,0));
268
+
269
+ Toast.makeText(this,"orange",Toast.LENGTH_SHORT).show();
270
+
271
+ break;
272
+
273
+ case R.id.pink_button:
274
+
275
+ drawingView.setPen(Color.rgb(255,192,187));
276
+
277
+ Toast.makeText(this,"pink",Toast.LENGTH_SHORT).show();
278
+
279
+ break;
280
+
281
+ case R.id.purple_button:
282
+
283
+ drawingView.setPen(Color.rgb(128,0,128));
284
+
285
+ Toast.makeText(this,"purple",Toast.LENGTH_SHORT).show();
286
+
287
+ break;
288
+
289
+ case R.id.kimidori_button:
290
+
291
+ drawingView.setPen(Color.rgb(85,107,47));
292
+
293
+ Toast.makeText(this,"darkgreen",Toast.LENGTH_SHORT).show();
294
+
295
+ break;
296
+
297
+ case R.id.mizuiro_button:
298
+
299
+ drawingView.setPen(Color.GREEN);
300
+
301
+ Toast.makeText(this,"green",Toast.LENGTH_SHORT).show();
302
+
303
+ break;
304
+
305
+ case R.id.hadairo_button:
306
+
307
+ drawingView.setPen(Color.rgb(245,208,169));
308
+
309
+ Toast.makeText(this,"hadairo",Toast.LENGTH_SHORT).show();
310
+
311
+ break;
312
+
313
+
314
+
315
+ //線の太さ指定
316
+
317
+ case R.id.hutosa1_button:
318
+
319
+ drawingView.setStrokeWidth(40);
320
+
321
+ Toast.makeText(this,"ペン先 1×1",Toast.LENGTH_SHORT).show();
322
+
323
+ break;
324
+
325
+ case R.id.hutosa2_button:
326
+
327
+ drawingView.setStrokeWidth(120);
328
+
329
+ Toast.makeText(this,"ペン先 3×3",Toast.LENGTH_SHORT).show();
330
+
331
+ break;
332
+
333
+ case R.id.kukei_button:
334
+
335
+ drawingView.setStrokeWidth(200);
336
+
337
+ Toast.makeText(this,"矩形",Toast.LENGTH_SHORT).show();
338
+
339
+
340
+
341
+ }
248
342
 
249
343
  }
250
344
 
251
- View.OnClickListener deleteDrawing = new View.OnClickListener(){
345
+
252
-
346
+
253
- @Override
347
+ @Override
254
-
348
+
255
- public void onClick(View view){
349
+ public void onPointerCaptureChanged(boolean hasCapture) {
256
-
257
- drawingView.delete();
350
+
258
-
259
- }
351
+
260
-
261
- };
262
-
263
-
264
-
265
-
266
-
267
- public void onClick(View v){
268
-
269
- switch(v.getId()){
270
-
271
- //線の色指定
272
-
273
- case R.id.blue_button:
274
-
275
- drawingView.setPen(Color.BLUE);
276
-
277
- Toast.makeText(this,"blue",Toast.LENGTH_SHORT).show();
278
-
279
- break;
280
-
281
- case R.id.red_button:
282
-
283
- drawingView.setPen(Color.RED);
284
-
285
- Toast.makeText(this,"red",Toast.LENGTH_SHORT).show();
286
-
287
- break;
288
-
289
- case R.id.yellow_button:
290
-
291
- drawingView.setPen(Color.YELLOW);
292
-
293
- Toast.makeText(this,"yellow",Toast.LENGTH_SHORT).show();
294
-
295
- break;
296
-
297
- case R.id.black_button:
298
-
299
- drawingView.setPen(Color.BLACK);
300
-
301
- Toast.makeText(this,"black",Toast.LENGTH_SHORT).show();
302
-
303
- break;
304
-
305
- case R.id.kesigomu_button:
306
-
307
- drawingView.setPen(Color.WHITE);
308
-
309
- drawingView.setStrokeWidth(40);
310
-
311
- Toast.makeText(this,"消しゴム",Toast.LENGTH_SHORT).show();
312
-
313
- break;
314
-
315
- case R.id.cyan_button:
316
-
317
- drawingView.setPen(Color.CYAN);
318
-
319
- Toast.makeText(this,"Cyan",Toast.LENGTH_SHORT).show();
320
-
321
- break;
322
-
323
- case R.id.gray_button:
324
-
325
- drawingView.setPen(Color.GRAY);
326
-
327
- Toast.makeText(this,"gray",Toast.LENGTH_SHORT).show();
328
-
329
- break;
330
-
331
- case R.id.green_button:
332
-
333
- drawingView.setPen(Color.GREEN);
334
-
335
- Toast.makeText(this,"green",Toast.LENGTH_SHORT).show();
336
-
337
- break;
338
-
339
- case R.id.orange_button:
340
-
341
- drawingView.setPen(Color.rgb(255,165,0));
342
-
343
- Toast.makeText(this,"orange",Toast.LENGTH_SHORT).show();
344
-
345
- break;
346
-
347
- case R.id.pink_button:
348
-
349
- drawingView.setPen(Color.rgb(255,192,187));
350
-
351
- Toast.makeText(this,"pink",Toast.LENGTH_SHORT).show();
352
-
353
- break;
354
-
355
- case R.id.purple_button:
356
-
357
- drawingView.setPen(Color.rgb(128,0,128));
358
-
359
- Toast.makeText(this,"purple",Toast.LENGTH_SHORT).show();
360
-
361
- break;
362
-
363
- case R.id.kimidori_button:
364
-
365
- drawingView.setPen(Color.rgb(85,107,47));
366
-
367
- Toast.makeText(this,"darkgreen",Toast.LENGTH_SHORT).show();
368
-
369
- break;
370
-
371
- case R.id.mizuiro_button:
372
-
373
- drawingView.setPen(Color.GREEN);
374
-
375
- Toast.makeText(this,"green",Toast.LENGTH_SHORT).show();
376
-
377
- break;
378
-
379
- case R.id.hadairo_button:
380
-
381
- drawingView.setPen(Color.rgb(245,208,169));
382
-
383
- Toast.makeText(this,"hadairo",Toast.LENGTH_SHORT).show();
384
-
385
- break;
386
-
387
-
388
-
389
- //線の太さ指定
390
-
391
- case R.id.hutosa1_button:
392
-
393
- drawingView.setStrokeWidth(40);
394
-
395
- Toast.makeText(this,"ペン先 1×1",Toast.LENGTH_SHORT).show();
396
-
397
- break;
398
-
399
- case R.id.hutosa2_button:
400
-
401
- drawingView.setStrokeWidth(120);
402
-
403
- Toast.makeText(this,"ペン先 3×3",Toast.LENGTH_SHORT).show();
404
-
405
- break;
406
-
407
- case R.id.kukei_button:
408
-
409
- drawingView.setStrokeWidth(200);
410
-
411
- Toast.makeText(this,"矩形",Toast.LENGTH_SHORT).show();
412
-
413
- break;
414
-
415
-
416
-
417
-
418
-
419
-
420
-
421
-
422
-
423
- }
424
352
 
425
353
  }
426
354
 
427
355
 
428
356
 
429
- @Override
430
-
431
- public void onPointerCaptureChanged(boolean hasCapture) {
432
-
433
-
434
-
435
- }
436
-
437
-
438
-
439
-
440
-
441
357
  }
442
358
 
359
+
360
+
443
361
  ```

1

コードの編集

2019/02/13 20:43

投稿

tokutoku453
tokutoku453

スコア13

test CHANGED
File without changes
test CHANGED
@@ -2,37 +2,39 @@
2
2
 
3
3
  キャンバス上に絵を描くことができるようになっていますが、こちらをセーブボタンを作り、セーブボタンをタップした際にandroid本体のアルバムに保存できるような処理を実装したいです
4
4
 
5
+ 2月14日追記
6
+
5
- ビットマップなどを色々使用てみましたがうまくいきませんでした。
7
+ こちらアンサーの追記などを元にコードを編集なおしましたが、画像保存のsaveImageの部分がなぜかエラーを起こしてアプリを起動することができません
6
-
7
- 解決方法などはあるのでしょうか?
8
+
8
-
9
-
10
-
9
+
10
+
11
- ```mainActivity
11
+ ```MainActivity
12
-
12
+
13
- import android.app.Activity;
13
+ import android.graphics.Bitmap;
14
-
14
+
15
- import android.graphics.Color;
15
+ import android.graphics.Color;
16
+
16
-
17
+ import android.graphics.drawable.BitmapDrawable;
18
+
17
- import android.os.Bundle;
19
+ import android.os.Bundle;
18
-
19
- import android.os.CpuUsageInfo;
20
+
20
-
21
- import android.support.v7.app.AppCompatActivity;
21
+ import android.support.v7.app.AppCompatActivity;
22
+
22
-
23
+ import android.util.Log;
24
+
23
- import android.view.View;
25
+ import android.view.View;
24
-
26
+
25
- import android.view.Window;
27
+ import android.view.Window;
26
-
28
+
27
- import android.widget.Button;
29
+ import android.widget.Button;
28
-
30
+
29
- import android.widget.CompoundButton;
31
+ import android.widget.ImageButton;
32
+
33
+ import android.widget.ImageView;
30
34
 
31
35
  import android.widget.Toast;
32
36
 
33
- import android.widget.ImageButton;
37
+
34
-
35
- import android.provider.MediaStore;
36
38
 
37
39
 
38
40
 
@@ -46,7 +48,7 @@
46
48
 
47
49
  Button hutosa1_button,hutosa2_button,kukei_button;
48
50
 
49
- Button savebutton;
51
+ Button capture_all;
50
52
 
51
53
 
52
54
 
@@ -68,6 +70,74 @@
68
70
 
69
71
 
70
72
 
73
+ Button capture_all = findViewById(R.id.capture_all);
74
+
75
+ capture_all.setOnClickListener(new View.OnClickListener() {
76
+
77
+ @Override
78
+
79
+ public void onClick(View v) {
80
+
81
+ // 画像保存
82
+
83
+ saveImage();
84
+
85
+ }
86
+
87
+ });
88
+
89
+
90
+
91
+ private void saveImage() {
92
+
93
+
94
+
95
+ // イメージビューからビットマップ保持
96
+
97
+ ImageView sampleDrawingView = (ImageView) findViewById(R.id.image);
98
+
99
+ Bitmap sampleImage = ((BitmapDrawable) sampleDrawingView.getDrawable()).getBitmap();
100
+
101
+
102
+
103
+ // ビットマップを SDカードに保存
104
+
105
+ ImageManager imageManager = new ImageManager(this);
106
+
107
+ try {
108
+
109
+ // 画像の保存実行
110
+
111
+ String albumName = "Save image sample";
112
+
113
+ imageManager.save(sampleImage, albumName);
114
+
115
+ } catch (Error e) {
116
+
117
+ Log.e("MainActivity", "onCreate: " + e);
118
+
119
+
120
+
121
+ // 画像の保存失敗メッセージ表示
122
+
123
+ Toast.makeText(MainActivity.this, "SDカードに保存できませんでした", Toast.LENGTH_SHORT).show();
124
+
125
+ } finally {
126
+
127
+ // 画像の保存完了メッセージ表示
128
+
129
+ Toast.makeText(MainActivity.this, "SDカードに保存しました", Toast.LENGTH_SHORT).show();
130
+
131
+
132
+
133
+ }
134
+
135
+ }
136
+
137
+
138
+
139
+
140
+
71
141
 
72
142
 
73
143
  //線の色指定
@@ -116,9 +186,7 @@
116
186
 
117
187
 
118
188
 
119
- //保存ボタン
189
+
120
-
121
- savebutton= findViewById(R.id.savebutton);
122
190
 
123
191
 
124
192
 
@@ -162,8 +230,6 @@
162
230
 
163
231
 
164
232
 
165
- savebutton.setOnClickListener(this);
166
-
167
233
 
168
234
 
169
235
 
@@ -344,9 +410,7 @@
344
410
 
345
411
  Toast.makeText(this,"矩形",Toast.LENGTH_SHORT).show();
346
412
 
347
-
413
+ break;
348
-
349
-
350
414
 
351
415
 
352
416