Android ImageView不会在单击图像后触发,但会在单击TextView后触发

Android ImageView不会在单击图像后触发,但会在单击TextView后触发,android,animation,imageview,rotation,Android,Animation,Imageview,Rotation,我的xml文件中有一个ImageView,我想在单击时旋转图像 我使用以下代码对此进行归档: @Override public boolean onTouchEvent(MotionEvent event) { if (event.getAction() == MotionEvent.ACTION_DOWN) { img = (ImageView) findViewById(R.id.imageView1); Animat

我的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;
    }
但问题是,当我按下图像时,什么都没有发生,图像不会旋转。但是如果我点击图像,然后点击文本视图,图像就会旋转

这太随机了

我做错了什么?我怎样才能解决这个问题


谢谢。

好吧,您似乎在为整个活动调用onTouchEvent函数。因此,任何未被活动窗口内的视图“消费”的触摸动作都将触发此功能。所以,如果你在活动的某个地方触摸,比如你的文本视图,就会触发图像旋转,这是合乎逻辑的

我认为看到您的代码最好是这样的:最好为您的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

        }
    });
}

我会支持epichoms的建议(使用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"

注意:如果在函数末尾包含了
img.invalidate()
调用,那么onTouch代码就可以工作了,尽管它仍然不能解决单击
TextView
也会启动动画的问题。谢谢你的回答,但它没有解决这个问题。我仍然无法通过单击图像触发动画,当我单击文本视图时图像仍然会触发。我只是在代码库上测试了它,它确实工作得很好。您是否如上所示使用了img.setOnClickListener?设置动画后是否立即调用invalidate?