質問編集履歴

4

助言をもとに書き直し

2019/01/07 11:51

投稿

tokutoku453
tokutoku453

スコア13

test CHANGED
File without changes
test CHANGED
@@ -6,15 +6,19 @@
6
6
 
7
7
  今現在の実装している処理だとマス目に沿って描画できずマス目が関係ない状態になっています。
8
8
 
9
+
10
+
11
+ 1月7日 20:47分追記
12
+
9
- ![イメージ説明](8b6cd980d3133ff91ca7ed42931ece37.png)
13
+ ![イメージ説明](0cf67e0191b389103a18627b9c9ab690.png)
14
+
15
+
16
+
10
-
17
+ アドバイスを元にコードを実装したところこのような結果になりました。思っていた通りにものすごく近づいたので嬉しいです!!
18
+
11
- こちらつのマス目に沿って点か線を描画できる処理を実装したのでが他サイトや他質を参考にしてのですが実装できていない状態です。
19
+ ACTION_MOVE入れて、動かしているので下の4つの線のようにマス目からずれている描画ってい。1マスなら題なのですが
12
-
20
+
13
- また斜め向かって描画る際もマス目に沿ってカクカク?状態で描画でき方法を今模索中
21
+ 3*3だと少し見苦しいものっているので少し修正したいと思いま。やぱり見苦しいのでACTION_MOVEを外し始点と終点をつぐ形のほうが見やすかったりすしょうか?
14
-
15
-
16
-
17
- 詳しい方のアドバイスを頂ければ嬉しいです。
18
22
 
19
23
  ```Drawingview
20
24
 
@@ -242,9 +246,21 @@
242
246
 
243
247
 
244
248
 
245
- float x = event.getX();
249
+ float dx = event.getX();
246
-
250
+
247
- float y = event.getY();
251
+ float dy = event.getY();
252
+
253
+
254
+
255
+ int x = (int) (dx - dx % 30) +15;
256
+
257
+ int y = (int) (dy - dy % 30) +15;
258
+
259
+
260
+
261
+      
262
+
263
+
248
264
 
249
265
 
250
266
 

3

タグの追加

2019/01/07 11:51

投稿

tokutoku453
tokutoku453

スコア13

test CHANGED
File without changes
test CHANGED
File without changes

2

内容の変更

2019/01/06 18:39

投稿

tokutoku453
tokutoku453

スコア13

test CHANGED
@@ -1 +1 @@
1
- drawrectを応用しドット打てるようにしたい
1
+ android 開発 マス目に沿っ描画したい
test CHANGED
@@ -1,11 +1,333 @@
1
- drawrectを用してドット打てるようにしたいと思っています。
2
-
3
- https://teratail.com/questions/44537
4
-
5
- こちらの質問を応用て矩形を打てるようしようと思っているのでが、DrawLineなどが邪魔をしていのかアプリケーションエラーエミュレータが落ちてしまいます。
6
-
7
- 応用方法などはあしょうか?
8
-
9
- また、マス目を指定してドットを打てるようにしたいのですがマス目に沿って矩形を描画する方法などはあるのでしょうか?
10
-
11
- しい方アドバ頂ければ嬉しいです
1
+ androidStudio使用してお絵描きアプリっています。
2
+
3
+ 現在お絵描きの基本的な機能を実装しマス目を描画するところまでは実装 ![イメージ説明](552488adb9dedb4aa5b06ce2dfffa24a.png)
4
+
5
+ 今躓いているとろはこちらの実装たマス目沿ってドットを描画することです。
6
+
7
+ 今現在の実装してい処理だとマス目に沿って描画きずマス目が関係ない状態になっています。
8
+
9
+ ![イメージ説明](8b6cd980d3133ff91ca7ed42931ece37.png)
10
+
11
+ こちらを一つのマス目に沿って点か線を描画できる処理を実装のですが他サトや他質問参考にるのですが実装できていない状態です。
12
+
13
+ また斜めに向かって描画する際もマス目に沿ってカクカク?な状態で描画できる方法を今模索中です
14
+
15
+
16
+
17
+ 詳しい方のアドバイスを頂ければ嬉しいです。
18
+
19
+ ```Drawingview
20
+
21
+ import android.content.Context;
22
+
23
+ import android.graphics.Canvas;
24
+
25
+ import android.graphics.Color;
26
+
27
+ import android.graphics.Paint;
28
+
29
+ import android.graphics.Path;
30
+
31
+ import android.graphics.Rect;
32
+
33
+ import android.util.AttributeSet;
34
+
35
+ import android.view.MotionEvent;
36
+
37
+ import android.view.View;
38
+
39
+ import java.util.ArrayList;
40
+
41
+ import java.util.List;
42
+
43
+
44
+
45
+
46
+
47
+ public class DrawingView extends View {
48
+
49
+
50
+
51
+
52
+
53
+
54
+
55
+ // 履歴
56
+
57
+ private List<DrawLine> lines;
58
+
59
+ // 現在、描いている線の情報
60
+
61
+ private Paint paint;
62
+
63
+ private Path path;
64
+
65
+ private Rect rect;
66
+
67
+ private Paint paint1;
68
+
69
+
70
+
71
+ // 線の履歴(座標+色)
72
+
73
+ class DrawLine {
74
+
75
+ private Paint paint;
76
+
77
+ private Path path;
78
+
79
+ private Rect rect;
80
+
81
+ private Paint paint1;
82
+
83
+
84
+
85
+
86
+
87
+ DrawLine(Path path, Paint paint, Rect rect) {
88
+
89
+ this.paint = new Paint(paint);
90
+
91
+ this.path = new Path(path);
92
+
93
+ this.rect = new Rect(rect);
94
+
95
+ //this.paint1 = new Paint(paint);
96
+
97
+ }
98
+
99
+
100
+
101
+
102
+
103
+ void draw(Canvas canvas) {
104
+
105
+ canvas.drawPath(this.path, this.paint);
106
+
107
+ }
108
+
109
+ }
110
+
111
+
112
+
113
+ public DrawingView(Context context) {
114
+
115
+ super(context);
116
+
117
+ }
118
+
119
+
120
+
121
+
122
+
123
+
124
+
125
+ public DrawingView(Context context, AttributeSet attrs) {
126
+
127
+ super(context, attrs);
128
+
129
+
130
+
131
+ this.path = new Path();
132
+
133
+
134
+
135
+ this.paint = new Paint();
136
+
137
+
138
+
139
+ this.rect = new Rect();
140
+
141
+
142
+
143
+
144
+
145
+
146
+
147
+ this.paint.setStyle(Paint.Style.STROKE);
148
+
149
+ // this.paint.setStrokeJoin(Paint.Join.MITER);//これがあると角が丸くなる
150
+
151
+ this.paint.setStrokeCap(Paint.Cap.SQUARE);
152
+
153
+ this.paint.setAntiAlias(true);
154
+
155
+ this.paint.setStrokeWidth(30);
156
+
157
+
158
+
159
+
160
+
161
+ this.lines = new ArrayList<DrawLine>();
162
+
163
+
164
+
165
+
166
+
167
+ }
168
+
169
+
170
+
171
+ @Override
172
+
173
+ protected void onDraw(Canvas canvas) {
174
+
175
+ super.onDraw(canvas);
176
+
177
+
178
+
179
+
180
+
181
+ // キャンバスをクリア
182
+
183
+ canvas.drawColor(Color.WHITE);
184
+
185
+ // 履歴から線を描画
186
+
187
+ for (DrawLine line : this.lines) {
188
+
189
+ line.draw(canvas);
190
+
191
+ }
192
+
193
+ // 現在、描いている線を描画
194
+
195
+ canvas.drawPath(this.path, this.paint);
196
+
197
+
198
+
199
+ Paint paint1 = new Paint(Color.WHITE);
200
+
201
+ paint1.setColor(Color.BLACK);
202
+
203
+ paint1.setStyle(Paint.Style.STROKE);//ペン先に合わせて色が一緒に代わってしまうので保留
204
+
205
+
206
+
207
+ for (int i = 0; i < 101; i++) {
208
+
209
+ for (int j = 0; j < 101; j++) {
210
+
211
+ int a = 30;
212
+
213
+ Rect rect = new Rect(a * i, a * j, a * (i + j) - 1, a * (i + j) - 1);
214
+
215
+
216
+
217
+ canvas.drawRect(rect, paint1);
218
+
219
+
220
+
221
+
222
+
223
+
224
+
225
+ }
226
+
227
+ }
228
+
229
+ }
230
+
231
+
232
+
233
+
234
+
235
+
236
+
237
+ @Override
238
+
239
+ public boolean onTouchEvent(MotionEvent event) {
240
+
241
+
242
+
243
+
244
+
245
+ float x = event.getX();
246
+
247
+ float y = event.getY();
248
+
249
+
250
+
251
+ switch (event.getAction()) {
252
+
253
+ case MotionEvent.ACTION_DOWN:
254
+
255
+ this.path.moveTo(x, y);
256
+
257
+ this.path.lineTo(x, y);
258
+
259
+ break;
260
+
261
+ // case MotionEvent.ACTION_MOVE:
262
+
263
+ //this.path.lineTo(x, y);  ←こちらの処理を無効化して、始点と終点の間に線を引く処理を可能にし直線を引けるようにした
264
+
265
+ // break;
266
+
267
+
268
+
269
+ case MotionEvent.ACTION_UP:
270
+
271
+ this.path.lineTo(x, y);
272
+
273
+ // 指を離したので、履歴に追加する
274
+
275
+ this.lines.add(new DrawLine(this.path, this.paint, this.rect));
276
+
277
+ // パスをリセットする
278
+
279
+ // これを忘れると、全ての線の色が変わってしまう
280
+
281
+ this.path.reset();
282
+
283
+ break;
284
+
285
+
286
+
287
+ }
288
+
289
+ invalidate();
290
+
291
+ return true;
292
+
293
+ }
294
+
295
+
296
+
297
+ public void delete() {
298
+
299
+ // 履歴をクリア
300
+
301
+ this.lines.clear();
302
+
303
+ // 現在の線をクリア
304
+
305
+ this.path.reset();
306
+
307
+ invalidate();
308
+
309
+ }
310
+
311
+
312
+
313
+ public void setPen(int color){
314
+
315
+ this.paint.setColor(color);
316
+
317
+ }
318
+
319
+
320
+
321
+ public void setStrokeWidth(float width){
322
+
323
+ this.paint.setStrokeWidth(width);
324
+
325
+
326
+
327
+ }
328
+
329
+ }
330
+
331
+
332
+
333
+ ```

1

サイトのURLが間違っていたため

2019/01/06 07:22

投稿

tokutoku453
tokutoku453

スコア13

test CHANGED
File without changes
test CHANGED
@@ -1,6 +1,6 @@
1
1
  drawrectを応用してドットを打てるようにしたいと思っています。
2
2
 
3
- https://teratail.com/questions/4453
3
+ https://teratail.com/questions/44537
4
4
 
5
5
  こちらの質問を応用して矩形を打てるようにしようと思っているのですが、DrawLineなどが邪魔をしているのかアプリケーションエラーでエミュレータが落ちてしまいます。
6
6