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

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

ただいまの
回答率

91.36%

  • Android Studio

    2720questions

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

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

解決済

回答 1

投稿 2017/11/20 12:46 ・編集 2017/11/23 17:15

  • 評価
  • クリップ 0
  • VIEW 53

KaWoRu

score 8

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;  //ON1 OFF0

//○○○○○は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でのメソッドを書いています。〕

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

0

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

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

投稿 2017/11/21 02:15

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/11/22 04:37

    回答ありがとうございます。返答が遅くなりまして申し訳ありませんでした。

    デバッグでご指摘の箇所を確認したのですが,,,押した画像のstartAnimationは呼び出されているのを確認しました。
    私にはわからないのですが,ifで呼び出されないように分けて呼び出されないようにしているはずの,もう片方の画像Viewも認識している状態がありました。
    ですが,それが原因とは思えなくて,他の原因を探していました。命令文を書いていないのに実行される原因がわからなくて・・・
    △△△△.startAnimation(bbbbb);であれば,△△△△だけが実行されるという認識でした。

    恥ずかしい限りですが私には,原因を突き止めるにはわからない点が多く,おそらく何かが競合しているのだという認識で,全てに対してScaleAnimationを作りました。根性解きですが,これでViewの差別化ができると考えました。

    今は,ScalleAnimtion aaaaaa,bbbbb,cccccc,dddddd;とボタンの数だけ作成し,またビューの数だけScaleの拡大と縮小のコードを書きました。

    この場合では,同時に他のViewが再生されることがなくなりましたが,原因がわからずじまいです。

    ご指摘の「Scaleタグ?」っていうのですか? 私にはどれをさしているのかわからずで,,教えていただけないでしょうか?
    Scale実行用に作成したxmLファイルの<scale>のことでしょうか?

    キャンセル

  • 2017/11/22 14:49

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

    キャンセル

  • 2017/11/22 21:29

    回答,ご指摘ありがとうございます。自分本位でした。申し訳ありませんでした。
    Scaleタグはすぐに消させていただきました。気をつけます。

    メソッドを省略せず質問に追記ということでしたので,つまづいた箇所をそのまま再現しました。
    呼び出している箇所はこれでよかったでしょうか。申し訳ありません。あまり学があるわけでなくご迷惑をおかけいたします。

    同じように三つViewを押すと同じようなモーションがあちこちで起こります。

    ifは条件が終わると その真か偽で処理が起こるはずなのに,二つ以上のモーションが起こります。
    何度も申し訳ありませんが,何かその原因を飲み込めるようなヒントがあればよろしくお願いします。

    キャンセル

  • 2017/11/23 02:23 編集

    へんな言い訳をコメントに書かないでください。事実が伝わりにくいです。
    また、コードは分割して記載してください。

    整理しましょう。
    ・○、△、□というImageViewがあり、それぞれオンとオフの状態がある。
    ・初期状態はオフ
    ・オフ状態のImageViewをクリックするとオン状態に変化する。この時、他のオン状態のImageViewはオフ状態に切り替わる。
    ・オン状態のImageViewをクリックするとオフ状態に変化する。
    ・状態が変わるときには対応したアニメーションが実行される。
    ・クリックはxmlのonClick属性で指定している。

    上記の要領で現状をまとめてください。
    まとめるときにあなたの感想や考えは別箇所に分けて書いてください。

    キャンセル

  • 2017/11/23 03:28

    すみません。下記の通りです。

    整理して頂いた内容の状況で
    ○→△→□を順番にONにしていくと,△を押した時点で,すでに○はオフ状態になっているのに関わらず,次の□を押すと,○が△と同時に同じモーションが再生される。
    です。

    知りたい原因は,□まで順番に押していったときに,□の段階で△だけでなく○が動いてしまうのかです。

    キャンセル

  • 2017/11/23 04:05 編集

    記述が悪いのはコメント1つ目の時の結果で分かりました。
    でも,質問文のような記述がなぜ駄目であるのかの原因がわからずです。

    あとご指摘の「コードは分割して記載して下さい。」は,折りたたみを複数作るってことだと思うのですが,質問欄の使用方法が違っていましたら申し訳ありません。

    キャンセル

  • 2017/11/23 09:57

    不可解ですね。
    startAnimationの直前でfメソッドを呼び出してインスタンスを作り直して見てください。

    また、コードの分割についてはその通りです。意味のまとまり毎にコードを分割して折りたたみを複数作ってください。

    キャンセル

  • 2017/11/23 17:44 編集

    ありがとうございます。startAnimationの直前に全てf,vメソッドを呼び出してみたら収まりました。
    Createの段階ではなく,ボタン毎に作るほうがいいみたいです。

    デバックで問題前後の流れを比べてみたのですが,同じような処理が呼び出されています。でも,メソッドを直前で呼び出した方が画像の拡大縮小は正常に動いていました。

    なぜ駄目なのかはわかりませんが,原因が取り除けました。

    キャンセル

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

ただいまの回答率

91.36%

関連した質問

同じタグがついた質問を見る

  • Android Studio

    2720questions

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