回答編集履歴

4

文章抜け修正

2017/10/24 15:11

投稿

keicha_hrs
keicha_hrs

スコア6768

test CHANGED
@@ -112,11 +112,11 @@
112
112
 
113
113
 
114
114
 
115
- yが0のときは猫が一番上にいるときなので、yが0より大きいときだけ処理を実行するように、`if (y > 0)`という条件を入れています。
115
+ yが0のときは猫が一番上にいるときなので、「うえ」を押したときにyが0より大きいときだけ処理を実行するように、`if (y > 0)`という条件を入れています。
116
-
117
-
118
-
116
+
117
+
118
+
119
- yが3のときは猫が一番下にいるときなので、yが3より小さいときだけ処理を実行するように、`if (y < 3)`という条件を入れています。
119
+ yが3のときは猫が一番下にいるときなので、「した」を押したときにyが3より小さいときだけ処理を実行するように、`if (y < 3)`という条件を入れています。
120
120
 
121
121
 
122
122
 

3

サンプルコード提示

2017/10/24 15:11

投稿

keicha_hrs
keicha_hrs

スコア6768

test CHANGED
@@ -91,3 +91,193 @@
91
91
  ```
92
92
 
93
93
  Android Support Library 26.0.0以上を適用すると、findViewByIdの結果をキャストせずに代入できるようになりました(長年不評だったところをようやく改めたということ)。その前提でサンプルを書いたので上記のようになっています。
94
+
95
+
96
+
97
+ ---
98
+
99
+
100
+
101
+ (10/25 00:08追記)
102
+
103
+ 文章だけで説明するのが難しいので、ざっくり作成したコードを載せます(ここまでするのはやり過ぎだと他の回答者様に怒られてしまうかもしれないけど)。一応ここではfindViewByIdのキャストは入れました。
104
+
105
+
106
+
107
+ このコードでは、縦4マス、横3マスの盤上を猫が移動するものとしています。開始時の猫の位置は左上としているので、xとyの初期値は0としています。
108
+
109
+
110
+
111
+ 基本的には、ボタンを押して猫を移動させる度にxまたはyを1ずつ増やしています。しかし、猫が端に到達したときにボタンを押したときには効かないようにする処理が必要です。そのためにif文を入れています。
112
+
113
+
114
+
115
+ yが0のときは猫が一番上にいるときなので、yが0より大きいときだけ処理を実行するように、`if (y > 0)`という条件を入れています。
116
+
117
+
118
+
119
+ yが3のときは猫が一番下にいるときなので、yが3より小さいときだけ処理を実行するように、`if (y < 3)`という条件を入れています。
120
+
121
+
122
+
123
+ ひだり、みぎについても考え方は同じです。
124
+
125
+
126
+
127
+ このコードを見て、イメージを掴んで欲しいなあと。
128
+
129
+
130
+
131
+ ```Java
132
+
133
+ public class MainActivity extends AppCompatActivity {
134
+
135
+ final static float TRANSLATE_X = 300.0f; // 1回の操作でX軸方向にいくつ動かすか
136
+
137
+ final static float TRANSLATE_Y = 300.0f; // 1回の操作でY軸方向にいくつ動かすか
138
+
139
+
140
+
141
+ // 盤面上の開始座標を初期値として設定する
142
+
143
+ private int x = 0;
144
+
145
+ private int y = 0;
146
+
147
+
148
+
149
+ @Override
150
+
151
+ protected void onCreate(Bundle savedInstanceState) {
152
+
153
+ super.onCreate(savedInstanceState);
154
+
155
+ setContentView(R.layout.activity_main);
156
+
157
+
158
+
159
+ Button button1 = (Button) findViewById(R.id.button1); // うえ
160
+
161
+ Button button2 = (Button) findViewById(R.id.button2); // した
162
+
163
+ Button button3 = (Button) findViewById(R.id.button3); // ひだり
164
+
165
+ Button button4 = (Button) findViewById(R.id.button4); // みぎ
166
+
167
+
168
+
169
+ button1.setOnClickListener(new View.OnClickListener() {
170
+
171
+ @Override
172
+
173
+ public void onClick(View v) {
174
+
175
+ // 「うえ」を押したときの処理
176
+
177
+ if (y > 0) {
178
+
179
+ float start = TRANSLATE_Y * y;
180
+
181
+ float end = start - TRANSLATE_Y;
182
+
183
+ animationImageView("translationY", start, end);
184
+
185
+ y--;
186
+
187
+ }
188
+
189
+ }
190
+
191
+ });
192
+
193
+ button2.setOnClickListener(new View.OnClickListener() {
194
+
195
+ @Override
196
+
197
+ public void onClick(View v) {
198
+
199
+ // 「した」を押したときの処理
200
+
201
+ if (y < 3) {
202
+
203
+ float start = TRANSLATE_Y * y;
204
+
205
+ float end = start + TRANSLATE_Y;
206
+
207
+ animationImageView("translationY", start, end);
208
+
209
+ y++;
210
+
211
+ }
212
+
213
+ }
214
+
215
+ });
216
+
217
+ button3.setOnClickListener(new View.OnClickListener() {
218
+
219
+ @Override
220
+
221
+ public void onClick(View v) {
222
+
223
+ // 「ひだり」を押したときの処理
224
+
225
+ if (x > 0) {
226
+
227
+ float start = TRANSLATE_X * x;
228
+
229
+ float end = start - TRANSLATE_X;
230
+
231
+ animationImageView("translationX", start, end);
232
+
233
+ x--;
234
+
235
+ }
236
+
237
+ }
238
+
239
+ });
240
+
241
+ button4.setOnClickListener(new View.OnClickListener() {
242
+
243
+ @Override
244
+
245
+ public void onClick(View v) {
246
+
247
+ // 「みぎ」を押したときの処理
248
+
249
+ if (x < 2) {
250
+
251
+ float start = TRANSLATE_X * x;
252
+
253
+ float end = start + TRANSLATE_X;
254
+
255
+ animationImageView("translationX", start, end);
256
+
257
+ x++;
258
+
259
+ }
260
+
261
+ }
262
+
263
+ });
264
+
265
+ }
266
+
267
+
268
+
269
+ void animationImageView(String property, float start, float end) {
270
+
271
+ ImageView imageView1 = (ImageView) findViewById(R.id.imageView1);
272
+
273
+ ObjectAnimator animator = ObjectAnimator.ofFloat(imageView1, property, start, end);
274
+
275
+ animator.setDuration(1000);
276
+
277
+ animator.start();
278
+
279
+ }
280
+
281
+ }
282
+
283
+ ```

2

補足

2017/10/24 15:08

投稿

keicha_hrs
keicha_hrs

スコア6768

test CHANGED
@@ -75,3 +75,19 @@
75
75
 
76
76
 
77
77
  短時間で雑に考えたので抜けがあるかもしれませんが。
78
+
79
+
80
+
81
+ ---
82
+
83
+
84
+
85
+ 本題とは関係ない部分についてですがちょっと補足。
86
+
87
+ ```Java
88
+
89
+ ImageView imageView1 = findViewById(R.id.imageView1);
90
+
91
+ ```
92
+
93
+ Android Support Library 26.0.0以上を適用すると、findViewByIdの結果をキャストせずに代入できるようになりました(長年不評だったところをようやく改めたということ)。その前提でサンプルを書いたので上記のようになっています。

1

メソッド名を修正

2017/10/21 08:19

投稿

keicha_hrs
keicha_hrs

スコア6768

test CHANGED
@@ -12,7 +12,7 @@
12
12
 
13
13
  ```Java
14
14
 
15
- void AnimationImageView(String property, float start, float end) {
15
+ void animationImageView(String property, float start, float end) {
16
16
 
17
17
  ImageView imageView1 = findViewById(R.id.imageView1);
18
18
 
@@ -44,7 +44,7 @@
44
44
 
45
45
  float end = start - 300.0f; // 終了位置を300.0減らした位置に
46
46
 
47
- AnimationImageView("translationY", start, end);
47
+ animationImageView("translationY", start, end);
48
48
 
49
49
  y--;
50
50
 
@@ -62,7 +62,7 @@
62
62
 
63
63
  float end = start + 300.0f; // 終了位置を300.0増やした位置に
64
64
 
65
- AnimationImageView("translationY", start, end);
65
+ animationImageView("translationY", start, end);
66
66
 
67
67
  y++;
68
68