質問編集履歴

1

MyView全文の追加

2016/05/11 07:48

投稿

surakku
surakku

スコア14

test CHANGED
File without changes
test CHANGED
@@ -44,31 +44,29 @@
44
44
 
45
45
 
46
46
 
47
- MyView抜粋
47
+ MyView全文
48
48
 
49
49
 
50
50
 
51
51
  public class MyView extends View {
52
52
 
53
- // イベント発生時のX 座標、Y 座標を保存するための動的配列
53
+ // イベント発生時の X 座標、Y 座標を保存するための動的配列
54
-
54
+
55
- private ArrayList array_x, array_y;
55
+ private ArrayList array_x, array_y;
56
-
56
+
57
- private ArrayList array_status;
57
+ private ArrayList array_status;
58
-
58
+
59
+
60
+
61
+
62
+
59
- private Paint p;
63
+ private Paint p;
60
-
61
-
62
-
63
- private Context xt;
64
+
64
-
65
-
66
-
67
-
68
-
65
+
66
+
69
- // コンストラクタ
67
+ // コンストラクタ(ここではこの引数のものを追加)
70
-
68
+
71
- public MyView(Context context) {
69
+ public MyView(Context context) {
72
70
 
73
71
  super(context);
74
72
 
@@ -80,15 +78,11 @@
80
78
 
81
79
  p = new Paint();
82
80
 
83
- xt = context;
84
-
85
- }
81
+ }
86
-
87
-
88
-
82
+
89
- public MyView(Context context, AttributeSet attrs) {
83
+ public MyView(Context context, AttributeSet attrs) {
90
-
84
+
91
- super(context);
85
+ super(context, attrs);
92
86
 
93
87
  array_x = new ArrayList();
94
88
 
@@ -98,16 +92,152 @@
98
92
 
99
93
  p = new Paint();
100
94
 
101
- xt = context;
102
-
103
- }
95
+ }
96
+
97
+
98
+
104
-
99
+ // ビューの描画を行うときに呼ばれるメソッド
100
+
105
-
101
+ @Override
102
+
106
-
103
+ protected void onDraw(Canvas canvas) {
104
+
105
+ super.onDraw(canvas);
106
+
107
+
108
+
109
+ // 背景を白色で塗りつぶす
110
+
111
+ p = new Paint();
112
+
113
+ p.setStyle(Paint.Style.FILL);
114
+
115
+ p.setColor(Color.WHITE);
116
+
117
+ canvas.drawRect(new Rect(0, 0,
118
+
119
+ canvas.getWidth(), canvas.getHeight()), p);
120
+
121
+ // 描画用の Paint オブジェクトを用意
122
+
123
+ //p = new Paint();
124
+
125
+ p.setStyle(Paint.Style.STROKE);
126
+
127
+ p.setColor(Color.RED);
128
+
129
+ // 配列内の座標を読み出して線(軌跡)を描画
130
+
131
+ for (int i = 1; i < array_status.size(); i++) {
132
+
133
+ // 描画するように(true)状態値が与えられているとき
134
+
135
+ // 一度離してしてから次に押されるまでの移動分は描画しない
136
+
137
+ if ((Boolean) array_status.get(i)) {
138
+
139
+ // 開始点の終了点の座標の値を取得
140
+
141
+ int x1 = (Integer) array_x.get(i - 1);
142
+
143
+ int x2 = (Integer) array_x.get(i);
144
+
145
+ int y1 = (Integer) array_y.get(i - 1);
146
+
147
+ int y2 = (Integer) array_y.get(i);
148
+
149
+ // 線を描画
150
+
151
+ canvas.drawLine(x1, y1, x2, y2, p);
152
+
153
+ }
154
+
155
+ }
156
+
157
+ }
158
+
159
+
160
+
161
+ // タッチパネルを操作した時に呼ばれるメソッド
162
+
163
+ @Override
164
+
165
+ public boolean onTouchEvent(MotionEvent event) {
166
+
167
+ // 座標を取得
168
+
169
+ int x = (int) event.getX();
170
+
171
+ int y = (int) event.getY();
172
+
173
+ // イベントに応じて動作を変更
174
+
175
+ switch (event.getAction()) {
176
+
177
+ case MotionEvent.ACTION_DOWN: // タッチパネルが押されたとき
178
+
179
+ case MotionEvent.ACTION_POINTER_DOWN:
180
+
181
+ array_x.add(new Integer(x)); // 座標を配列に保存
182
+
183
+ array_y.add(new Integer(y)); // 線の描画はしない(false)
184
+
185
+ array_status.add(new Boolean(false));
186
+
187
+ invalidate(); // 画面を強制的に再描画
188
+
189
+ break;
190
+
191
+ case MotionEvent.ACTION_MOVE:
192
+
193
+ array_x.add(new Integer(x)); // 座標を配列に保存
194
+
195
+ array_y.add(new Integer(y)); // 線の描画をする(true)
196
+
197
+ array_status.add(new Boolean(true));
198
+
199
+ invalidate(); // 画面を強制的に再描画
200
+
201
+ break;
202
+
203
+ case MotionEvent.ACTION_UP: // タッチパネルから離れたとき
204
+
205
+ case MotionEvent.ACTION_POINTER_UP:
206
+
207
+ array_x.add(new Integer(x)); // 座標を配列に保存
208
+
209
+ array_y.add(new Integer(y)); // 線の描画をする(true)
210
+
211
+ array_status.add(new Boolean(true));
212
+
213
+ invalidate(); // 画面を強制的に再描画
214
+
215
+ break;
216
+
217
+ }
218
+
219
+ return true;
220
+
221
+ }
222
+
223
+
224
+
107
- public void colorBlue() { //色を青に変えるメソッド
225
+ public void colorBlue() { // 色を青に変えるメソッド
226
+
108
-
227
+ p = new Paint();
228
+
109
- p.setColor(Color.BLUE);
229
+ p.setColor(Color.BLUE);
110
-
230
+
111
- }
231
+ }
112
-
232
+
113
- }
233
+ }
234
+
235
+
236
+
237
+
238
+
239
+ 追記
240
+
241
+ 皆さん有難うございます。ボタンを押すと強制終了する問題は何故か解決しました。しかしペンの色を変えることができません。そこを教えていただけませんでしょうかm(__)m
242
+
243
+ MyViewの全文を記載させていただきます。