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

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

ただいまの
回答率

89.55%

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

解決済

回答 1

投稿 編集

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

KaWoRu

score 12

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/23 03:50 編集

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

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

    キャンセル

  • 2017/11/23 09:57

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

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

    キャンセル

  • 2017/11/23 17:38 編集

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

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

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

    キャンセル

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

  • ただいまの回答率 89.55%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

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