1

xml ファイルに ImageView があり、クリックしたときに画像を回転させたい。

これをアーカイブするには、次のコードを使用します。

@Override
    public boolean onTouchEvent(MotionEvent event) {

        if (event.getAction() == MotionEvent.ACTION_DOWN) {
            img = (ImageView) findViewById(R.id.imageView1);
            Animation an = new RotateAnimation(0.0f, 360.0f, img.getWidth() / 2,
                    img.getHeight() / 2);
            an.reset();
            // Set the animation's parameters
            an.setDuration(1000); // duration in ms
            an.setRepeatCount(0); // -1 = infinite repeated
            an.setRepeatMode(Animation.REVERSE); // reverses each repeat
            an.setFillAfter(true); // keep rotation after animation
            //an.start();
            img.setAnimation(an);


        }
        return true;
    }

しかし、問題は、画像を押しても何も起こらず、画像が回転しないことです。しかし、画像をクリックしてから TextView をクリックすると、画像が回転します。

これはとてもランダムです。

私は何を間違っていますか?どうすればこれを修正できますか?

ありがとう。

4

2 に答える 2

0

(OnClickListener を使用して) エピコムによる推奨事項を支持します。また、ImageView がクリックを受信できることを確認してください。

final ImageView img = (ImageView)findViewById(R.id.imageView1);
img.setClickable(true);
img.setFocusable(true);
img.setOnClickListener(new View.OnClickListener(){
    ...

これらの値は、XML レイアウトでも設定できます。

android:clickable="true"
android:focusable="true"
于 2012-04-29T04:31:49.813 に答える
0

さて、アクティビティ全体に対して onTouchEvent 関数を呼び出しているようです。したがって、アクティビティ ウィンドウ内のビューによって「消費」されないタッチ アクションは、この関数をトリガーします。したがって、 TextView などのアクティビティのどこかに触れると、この画像の回転がトリガーされるのは論理的です。

あなたのコードを見る私の最善の推測は次のとおりです。アクティビティ全体ではなく、ImageView自体にタッチ/クリックイベントリスナーを実装するのが最善です。これを行うコード スニペットを次に示します。

@Override
public void onCreate(Bundle savedInstanceState){
    super.onCreate(savedInstanceState);
    /*YOUR CUSTOM CODE AT ACTIVITY CREATION HERE*/

    /*here we implement a click listener for your ImageView*/
    final ImageView img = (ImageView)findViewById(R.id.imageView1);
    img.setOnClickListener(new View.OnClickListener(){
        @Override
        public void onClick(View v){
            Animation an = new RotateAnimation(0.0f, 360.0f, img.getWidth() / 2, img.getHeight() / 2);
            an.reset();
            /* Set the animation's parameters*/
            an.setDuration(1000); // duration in ms
            an.setRepeatCount(0); // -1 = infinite repeated
            an.setRepeatMode(Animation.REVERSE); // reverses each repeat
            an.setFillAfter(true); // keep rotation after animation
            //an.start();
            img.setAnimation(an);
            img.invalidate(); //IMPORTANT: force image refresh

        }
    });
}
于 2012-04-29T01:44:03.017 に答える