我正在开发一个应用程序,它具有从右到中移动的动画图像视图。当单击图像时,将调用OnClick()。但是当我点击图像移动路径中的屏幕(靠近图像视图)时,也会触发OnClick()。请告诉我如何仅为图像视图设置点击监听器。 我的代码是:
ll = new LinearLayout(this);
ll.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
ll.setOrientation(LinearLayout.VERTICAL);
ll.setGravity(Gravity.CENTER);
imageView=new ImageView(getApplicationContext());
imageView.setImageResource(R.drawable.moveimage1);
int width=getWindowManager().getDefaultDisplay().getWidth()/2;
System.out.println("width==="+width);
moveLefttoRight = new TranslateAnimation(width, 0, 0, 0);
moveLefttoRight.setDuration(3000);
moveLefttoRight.setRepeatCount(TranslateAnimation.INFINITE); // animation repeat count
moveLefttoRight.setRepeatMode(2);
imageView.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(getApplicationContext(), "Clicked", Toast.LENGTH_LONG).show();
System.out.println("Clicked");
}
});
imageView.startAnimation(moveLefttoRight);
ll.addView(imageView);
setContentView(ll);
答案 0 :(得分:0)
动画完成后,您可以附加onclick侦听器。 要获得更可靠的解决方案,请创建一个工作线程来处理需要为动画完成的所有计算,并仅更新主线程上的实际绘图。 E.g:
ScheduledExecutorService executor = Executors
.newScheduledThreadPool(1);
// Execute the run() in Worker Thread every REFRESH_RATE
// milliseconds
mMoverFuture = executor.scheduleWithFixedDelay(new Runnable() {
@Override
public void run() {
// TODO - implement movement logic.
if (moveWhileOnScreen()) {
stop(false);
}
else {
postInvalidate();
}
}
}, 0, REFRESH_RATE, TimeUnit.MILLISECONDS);
通过这种方式,您可以附加onclick侦听器,而不会干扰移动。