我的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,图像就会旋转。
这是随机的。
我做错了什么?我该如何解决这个问题?
感谢。
答案 0 :(得分: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
}
});
}
答案 1 :(得分:0)
我会通过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"