2つ以上imageViewを用いてタップしたらカードをめくるようなアニメーションを考えています。
一応1枚ずつ画像タップしたときカードがめくるアニメーションは実装できたのですが、
画像を2つ同時にタップしたときの動作がうまくいきません。
まずタップすると2回onClickが呼び出され、そのあとonAnimationEndが動くのですが、
本来onAnimationEndは1枚目の表裏の呼び出しと2枚目の表裏の呼びだしの計4回呼びだされるはずですが、
2回しか呼び出されません。
下のソースコードは画像をタップした時の処理です。
表の画像が回転させています。
java
1 public void onClick(View v) { 2 //状態設定 3 if(gameStatus == CARD_WAIT) { 4 gameStatus = CARD_SELECT; //選択待ち状態なら1枚目選択中にする 5 selectCardId = randomCardDatas.get(getViewNo(v)).getCardId(); //1枚目のカードID 6 selectView = selectViewOld = getViewNo(v); //1枚目選択されたview保持 7 } 8 else if(gameStatus == CARD_SELECT){ //1枚目選択済み 9 selectView = getViewNo(v); 10 //当たり判定 1枚目と2枚目のカードID一致 11 if(randomCardDatas.get(getViewNo(v)).getCardId() == selectCardId){ 12 //当たりフラグをたてる 13 correctflg = true; 14 } 15 else{ 16 correctflg = false; 17 } 18 gameStatus = CARD_ANIM_WAIT; 19 } 20 else{ 21 return; 22 } 23 24 // カードがクリックされたら、90°回転 25 AnimationSet set = new AnimationSet(true); 26 27 ScaleAnimation scale = new ScaleAnimation( 1.0f, 0.0f, 1.0f, 1.0f, 200f/2, 200f/2); 28 scale.setAnimationListener(this); 29 set.setFillAfter(true); 30 set.setFillEnabled(true); 31 set.addAnimation(scale); 32 set.setDuration(100); 33 set.setInterpolator(new LinearInterpolator()); 34 35 switch(v.getId()){ 36 case R.id.imageView1: 37 view[0].startAnimation(set); 38 randomCardDatas.get(0).setChoiceflg(true); 39 break; 40 case R.id.imageView2: 41 view[1].startAnimation(set); 42 randomCardDatas.get(1).setChoiceflg(true); 43 break; 44 case R.id.imageView3: 45 view[2].startAnimation(set); 46 randomCardDatas.get(2).setChoiceflg(true); 47 break; 48 case R.id.imageView4: 49 view[3].startAnimation(set); 50 randomCardDatas.get(3).setChoiceflg(true); 51 break; 52 } 53 }
下のソースコードは表の回転が終わったときに呼びだされ、裏の画像へと回転する処理を入れています。
java
1 @Override 2 public void onAnimationEnd(Animation animation) { 3 // 後半の回転終了時の呼び出し 4 if( animation_hf_flg==false ){ 5 return; 6 } 7 8 // X方向のサイズが0になって画像が見えない内に画像を変更 9 Boolean flg = (Boolean)view[selectView].getTag(); 10 if( flg==false ){ 11 //裏画像 12 view[selectView].setImageResource(randomCardDatas.get(selectView).getCardId()); 13 }else{ 14 //表画像 15 view[selectView].setImageResource(R.drawable.card); 16 } 17 view[selectView].setTag(!flg); 18 19 // もう一度90°回転 20 AnimationSet set = new AnimationSet(true); 21 ScaleAnimation scale = new ScaleAnimation( 0.0f, 1.0f, 1.0f, 1.0f, 200f/2, 200f/2); 22 scale.setAnimationListener(this); 23 set.setFillAfter(true); 24 set.setFillEnabled(true); 25 set.addAnimation(scale); 26 set.setDuration(100); 27 set.setInterpolator( new LinearInterpolator()); 28 view[selectView].startAnimation(set); 29 animation_hf_flg = false; 30 }
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。