質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

Q&A

解決済

1回答

1300閲覧

Scale/AndroidStudio  imageViewのScale処理について教えてください

KaWoRu

総合スコア14

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

0グッド

0クリップ

投稿2017/11/20 03:46

編集2017/11/23 08:15

AndoridStudio ver2.3.3
質問させて頂きます。

下記のコードのようにつくりifを使ってimageViewを押すと,その押したビューが大きくなったり小さくなったりするようにしていました。

そのimageView(ボタン)の種類数を増やしていったのですが,あるボタンがONの状態の時に,それ以外のimageViewボタンをONにすると,最初に押した一つ目のimageViewも同時にONが再生されます。

imageViewを○○○○と△△△△で分けているのにどうして,同時に実行されてしまうのでしょうか?

コレを防ぐためには何かいい案がありましたら教えてください。そもそも私の使用が不適切なのかもしれません。
よろしくお願いします。

ImageView ○○○○○,△△△△△,□□□□□,▽▽▽▽▽; ScaleAnimation aaaaa,bbbbb; //aaaaaは拡大用,bbbbbは縮小用 int signal1=0,signal2=0,signal3=0; //ONを1 OFFを0 //○○○○○はonClickをview_Click1,△△△△△は,onClickをview_Click2,□□□□□はonClickをview_Click3 //signal_1は○○○○○のon-off用,signal_2は△△△△△のon-off用,signal_3は□□□□□のon-off用
<MainActivity.java> @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ○○○○○ = (ImageView) findViewById(R.id.imafeview1); △△△△△ = (ImageView) findViewById(R.id.imafeview2); □□□□□ = (ImageView) findViewById(R.id.imafeview3); vvvvv(); fffff(); } public void vvvvv(){ //ビューをビュー50%の位置から1.0倍から1.2倍へ aaaaa = new ScaleAnimation(1.0f, 1.2f, 1.0f, 1.2f, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f); aaaaa.setDuration(400);//再生時間の指定 aaaaa.setFillAfter(true);//終了時の状態(固定) } public void fffff(){ //ビューをビュー50%の位置から1.2倍から1.0倍へ bbbbb = new ScaleAnimation(1.2f, 1.0f, 1.2f, 1.0f, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f); bbbbb.setDuration(400);//再生時間の指定 bbbbb.setFillAfter(true);//終了時のビューの状態(固定) }
<一つ目のimageViewが押された時の処理> public void view_Click1(View view){ if(signal1==0){ signal1=1;               //画像View○○○○○が押されたので,ON状態を示す1に書き換え 1をON 0をOFF ○○○○○.startAnimation(aaaaa); //画像View○○○○○の拡大 if(signal2==1){ //他のViewがON 状態であればOFF状態にするための記述 signal2=0; //ONからOFFへ書き換え △△△△△.startAnimation(bbbbb); //同時に縮小モーションを再生 }else if(signal3==1){ signal3=0;//ONからOFFへ書き換え □□□□□.startAnimation(bbbbb) //同時に縮小モーションを再生 }        }else if(signal==1){ signal=0;             //ON状態からOFF状態に切り替えるため0に書き換え ○○○○○.startAnimation(bbbbb); //オン状態であれば一度拡大が実行されているので縮小モーションを再生する。 } }
<二つ目のimageViewが押された時の処理> public void view_Click2(View view){ if(signal2==0){ signal2=1; △△△△△.startAnimation(aaaaa); if(signal1==1){ signal1=0; ○○○○○.startAnimation(bbbbb); }else if(signal3==1){ signal3=0; □□□□□.startAnimation(bbbbb); } }else if(signal2==1){ signal2=0; △△△△△.startAnimation(bbbbb); } }
<三つ目のimageViewが押された時の処理> public void view_Click3(View view){ if(signal3==0){ signal3=1; □□□□□.startAnimation(aaaaa); if(signal1==1){ signal1=0; ○○○○○.startAnimation(bbbbb); }else if(signal2==1){ signal2=0; △△△△△.startAnimation(bbbbb); } }else if(signal3==1){ signal3=0; □□□□□.startAnimation(bbbbb); } }

MainActivityjavaで直接記述ではなく,新規でScale.xmlを作成して同じように読み込ませるようにして処理させても同じでした。( AnimationUtils.loadAnimationで)

申し訳ありませんが,何が問題となっているのか教えてください。
よろしくお願いします。

追記および変更〔省略していた部分を追記しています。またボタンの数が2つでは再現性が分かりづらいので3つのViewでのメソッドを書いています。〕

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

デバッグをしましょう。
全てのstartAnimationにブレークポイントを設置して、画像をクリックした時にどのstartAnimationが呼ばれているかを確認してください。

また、Scaleタグは名前が同じで意味が異なるので外しましょう。

投稿2017/11/20 17:15

yona

総合スコア18155

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

KaWoRu

2017/11/21 19:37

回答ありがとうございます。返答が遅くなりまして申し訳ありませんでした。 デバッグでご指摘の箇所を確認したのですが,,,押した画像のstartAnimationは呼び出されているのを確認しました。 私にはわからないのですが,ifで呼び出されないように分けて呼び出されないようにしているはずの,もう片方の画像Viewも認識している状態がありました。 ですが,それが原因とは思えなくて,他の原因を探していました。命令文を書いていないのに実行される原因がわからなくて・・・ △△△△.startAnimation(bbbbb);であれば,△△△△だけが実行されるという認識でした。 恥ずかしい限りですが私には,原因を突き止めるにはわからない点が多く,おそらく何かが競合しているのだという認識で,全てに対してScaleAnimationを作りました。根性解きですが,これでViewの差別化ができると考えました。 今は,ScalleAnimtion aaaaaa,bbbbb,cccccc,dddddd;とボタンの数だけ作成し,またビューの数だけScaleの拡大と縮小のコードを書きました。 この場合では,同時に他のViewが再生されることがなくなりましたが,原因がわからずじまいです。 ご指摘の「Scaleタグ?」っていうのですか? 私にはどれをさしているのかわからずで,,教えていただけないでしょうか? Scale実行用に作成したxmLファイルの<scale>のことでしょうか?
yona

2017/11/22 05:49

startAnimationの呼び出している箇所をメソッドを省略せずに質問に追記してください。 質問に付いているScaleタグのことです。
KaWoRu

2017/11/22 12:29

回答,ご指摘ありがとうございます。自分本位でした。申し訳ありませんでした。 Scaleタグはすぐに消させていただきました。気をつけます。 メソッドを省略せず質問に追記ということでしたので,つまづいた箇所をそのまま再現しました。 呼び出している箇所はこれでよかったでしょうか。申し訳ありません。あまり学があるわけでなくご迷惑をおかけいたします。 同じように三つViewを押すと同じようなモーションがあちこちで起こります。 ifは条件が終わると その真か偽で処理が起こるはずなのに,二つ以上のモーションが起こります。 何度も申し訳ありませんが,何かその原因を飲み込めるようなヒントがあればよろしくお願いします。
yona

2017/11/22 17:23 編集

へんな言い訳をコメントに書かないでください。事実が伝わりにくいです。 また、コードは分割して記載してください。 整理しましょう。 ・○、△、□というImageViewがあり、それぞれオンとオフの状態がある。 ・初期状態はオフ ・オフ状態のImageViewをクリックするとオン状態に変化する。この時、他のオン状態のImageViewはオフ状態に切り替わる。 ・オン状態のImageViewをクリックするとオフ状態に変化する。 ・状態が変わるときには対応したアニメーションが実行される。 ・クリックはxmlのonClick属性で指定している。 上記の要領で現状をまとめてください。 まとめるときにあなたの感想や考えは別箇所に分けて書いてください。
KaWoRu

2017/11/22 18:28

すみません。下記の通りです。 整理して頂いた内容の状況で ○→△→□を順番にONにしていくと,△を押した時点で,すでに○はオフ状態になっているのに関わらず,次の□を押すと,○が△と同時に同じモーションが再生される。 です。 知りたい原因は,□まで順番に押していったときに,□の段階で△だけでなく○が動いてしまうのかです。
KaWoRu

2017/11/22 19:05 編集

記述が悪いのはコメント1つ目の時の結果で分かりました。 でも,質問文のような記述がなぜ駄目であるのかの原因がわからずです。 あとご指摘の「コードは分割して記載して下さい。」は,折りたたみを複数作るってことだと思うのですが,質問欄の使用方法が違っていましたら申し訳ありません。
yona

2017/11/23 00:57

不可解ですね。 startAnimationの直前でfメソッドを呼び出してインスタンスを作り直して見てください。 また、コードの分割についてはその通りです。意味のまとまり毎にコードを分割して折りたたみを複数作ってください。
KaWoRu

2017/11/23 08:44 編集

ありがとうございます。startAnimationの直前に全てf,vメソッドを呼び出してみたら収まりました。 Createの段階ではなく,ボタン毎に作るほうがいいみたいです。 デバックで問題前後の流れを比べてみたのですが,同じような処理が呼び出されています。でも,メソッドを直前で呼び出した方が画像の拡大縮小は正常に動いていました。 なぜ駄目なのかはわかりませんが,原因が取り除けました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問