質問編集履歴

2

override

2017/04/24 05:45

投稿

rei-
rei-

スコア11

test CHANGED
File without changes
test CHANGED
@@ -234,48 +234,50 @@
234
234
 
235
235
  setContentView(R.layout.activity_main);
236
236
 
237
+ }
238
+
239
+
240
+
241
+ @Override
242
+
243
+ public boolean onTouchEvent(MotionEvent event){
244
+
245
+ String action="";
246
+
247
+ switch(event.getAction()){
248
+
249
+ case MotionEvent.ACTION_DOWN:
250
+
251
+ action ="ACTION_DOWN";
252
+
253
+ break;
254
+
255
+ case MotionEvent.ACTION_UP:
256
+
257
+ action="ACTION_UP";
258
+
259
+ break;
260
+
261
+ case MotionEvent.ACTION_MOVE:
262
+
263
+ action="ACTION_MOVE";
264
+
265
+ break;
266
+
267
+ case MotionEvent.ACTION_CANCEL:
268
+
269
+ action="ACTION_CANCEL";
270
+
271
+ break;
272
+
273
+ }
274
+
275
+ Log.v("MotionEvent","action=" + action + "," + "x="+String.valueOf(event.getX())+","+"y="+String.valueOf(event.getY()));
276
+
277
+ return super.onTouchEvent(event);
278
+
237
279
  }
238
280
 
239
-
240
-
241
- public boolean onTouchEvent(MotionEvent event){
242
-
243
- String action="";
244
-
245
- switch(event.getAction()){
246
-
247
- case MotionEvent.ACTION_DOWN:
248
-
249
- action ="ACTION_DOWN";
250
-
251
- break;
252
-
253
- case MotionEvent.ACTION_UP:
254
-
255
- action="ACTION_UP";
256
-
257
- break;
258
-
259
- case MotionEvent.ACTION_MOVE:
260
-
261
- action="ACTION_MOVE";
262
-
263
- break;
264
-
265
- case MotionEvent.ACTION_CANCEL:
266
-
267
- action="ACTION_CANCEL";
268
-
269
- break;
270
-
271
- }
272
-
273
- Log.v("MotionEvent","action=" + action + "," + "x="+String.valueOf(event.getX())+","+"y="+String.valueOf(event.getY()));
274
-
275
- return super.onTouchEvent(event);
276
-
277
- }
278
-
279
281
  }
280
282
 
281
283
  ```

1

内容追加

2017/04/24 05:45

投稿

rei-
rei-

スコア11

test CHANGED
File without changes
test CHANGED
@@ -2,13 +2,219 @@
2
2
 
3
3
 
4
4
 
5
+ ##現状、やりたいこと
6
+
7
+ 以下はIMEのメインのコードです。
8
+
9
+ 現状では「あ」を押すと「あ」が入力できます。
10
+
11
+ 今後は「あ」を押した後フリックであ行が入力できる、一般的な日本語フリック入力を実装したいです。
12
+
13
+
14
+
15
+
16
+
17
+ ```
18
+
19
+ public class InputIME extends InputMethodService implements KeyboardView.OnKeyboardActionListener{
20
+
21
+
22
+
23
+ private KeyboardView kv;
24
+
25
+ private Keyboard keyboard;
26
+
27
+
28
+
29
+ @Override
30
+
31
+ public View onCreateInputView(){
32
+
33
+ kv = (KeyboardView)getLayoutInflater().inflate(R.layout.input_keyboard, null);
34
+
35
+ keyboard = new Keyboard(this, R.xml.input_keyboard);
36
+
37
+ kv.setKeyboard(keyboard);
38
+
39
+ kv.setOnKeyboardActionListener(this);
40
+
41
+ return kv;
42
+
43
+ }
44
+
45
+
46
+
47
+ @Override
48
+
49
+ public void onPress(int primaryCode) {
50
+
51
+ }
52
+
53
+
54
+
55
+ @Override
56
+
57
+ public void onRelease(int primaryCode) {
58
+
59
+ }
60
+
61
+
62
+
63
+ @Override
64
+
65
+ public void onKey(int primaryCode, int[] keyCodes) {
66
+
67
+ if(primaryCode == Keyboard.KEYCODE_DELETE){
68
+
69
+ keyDownUp(KeyEvent.KEYCODE_DEL);
70
+
71
+ }else if(primaryCode == Keyboard.KEYCODE_SHIFT){
72
+
73
+ keyDownUp(KeyEvent.KEYCODE_SHIFT_RIGHT);
74
+
75
+ }else if(primaryCode == Keyboard.KEYCODE_DONE){
76
+
77
+ keyDownUp(KeyEvent.KEYCODE_ENTER);
78
+
79
+ }else if(primaryCode == Keyboard.EDGE_LEFT){
80
+
81
+ keyDownUp(KeyEvent.KEYCODE_DPAD_LEFT);
82
+
83
+ }else if(primaryCode == Keyboard.EDGE_RIGHT){
84
+
85
+ keyDownUp(KeyEvent.KEYCODE_DPAD_RIGHT);
86
+
87
+ }else if(primaryCode == InputCode.NONE){
88
+
89
+ getCurrentInputConnection().commitText("", 1);
90
+
91
+ }else if(primaryCode == InputCode.A){
92
+
93
+ getCurrentInputConnection().commitText("あ", 1);
94
+
95
+ }else if(primaryCode == InputCode.KA){
96
+
97
+ getCurrentInputConnection().commitText("か", 1);
98
+
99
+ }else if(primaryCode == InputCode.SA){
100
+
101
+ getCurrentInputConnection().commitText("さ", 1);
102
+
103
+ }else if(primaryCode == InputCode.TA){
104
+
105
+ getCurrentInputConnection().commitText("た", 1);
106
+
107
+ }else if(primaryCode == InputCode.NA){
108
+
109
+ getCurrentInputConnection().commitText("な", 1);
110
+
111
+ }else if(primaryCode == InputCode.HA){
112
+
113
+ getCurrentInputConnection().commitText("は", 1);
114
+
115
+ }else if(primaryCode == InputCode.MA){
116
+
117
+ getCurrentInputConnection().commitText("ま", 1);
118
+
119
+ }else if(primaryCode == InputCode.YA){
120
+
121
+ getCurrentInputConnection().commitText("や", 1);
122
+
123
+ }else if(primaryCode == InputCode.RA){
124
+
125
+ getCurrentInputConnection().commitText("ら", 1);
126
+
127
+ }else if(primaryCode == InputCode.WA){
128
+
129
+ getCurrentInputConnection().commitText("わ", 1);
130
+
131
+
132
+
133
+ }else{
134
+
135
+ //文字の割り当てのあるKEYCODEの場合
136
+
137
+ getCurrentInputConnection().commitText(String.valueOf((char)primaryCode), 1);
138
+
139
+ }
140
+
141
+ }
142
+
143
+
144
+
145
+ private void keyDownUp(int keyEventCode) {
146
+
147
+ getCurrentInputConnection().sendKeyEvent(new KeyEvent(KeyEvent.ACTION_DOWN, keyEventCode));
148
+
149
+ getCurrentInputConnection().sendKeyEvent(new KeyEvent(KeyEvent.ACTION_UP, keyEventCode));
150
+
151
+ }
152
+
153
+
154
+
155
+ @Override
156
+
157
+ public boolean onKeyDown(int keyCode, KeyEvent event){
158
+
159
+ return super.onKeyDown(keyCode, event);
160
+
161
+ }
162
+
163
+
164
+
165
+ @Override
166
+
167
+ public void onText(CharSequence text) {
168
+
169
+ }
170
+
171
+
172
+
173
+ @Override
174
+
175
+ public void swipeLeft() {
176
+
177
+ }
178
+
179
+
180
+
181
+ @Override
182
+
183
+ public void swipeRight() {
184
+
185
+ }
186
+
187
+
188
+
189
+ @Override
190
+
191
+ public void swipeDown() {
192
+
193
+ }
194
+
195
+
196
+
197
+ @Override
198
+
199
+ public void swipeUp() {
200
+
201
+ }
202
+
203
+ }
204
+
205
+ ```
206
+
207
+ ##問題点
208
+
209
+ まずタッチ座標を取得しようと以下のコードを書きました。
210
+
5
- onTouchEventでりあえずタッチし座標を取得でるようにしたですが、最初に表示される画面上のみしか取得できません
211
+ デバックすると最初にactivity_main(Hello worldだけ書かれ画面)が開、その画面上では座標を取得できました
6
-
7
-
8
-
212
+
9
- MainActivityに書いてまっいるのが問題のかと思いますが、解決方法がわかりません
213
+ かし、この画面を閉じメモアプリなどで自作IMEを開くと座標取得できってしまいます。
10
-
214
+
11
- キーボードが表示されている時に座標を取得するにはどうしたら良いでしょうか。
215
+ IME上で座標を取得するにはどうしたら良いでしょうか。
216
+
217
+ エラーなどははかれていません。
12
218
 
13
219
 
14
220