如何为动画图像视图设置onclick侦听器

时间:2014-03-06 06:17:51

标签: android animation imageview

我正在开发一个应用程序,它具有从右到中移动的动画图像视图。当单击图像时,将调用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);

1 个答案:

答案 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侦听器,而不会干扰移动。