如何点击Android中的动画视图或对象?

时间:2014-01-18 05:23:01

标签: android animation click objectanimator

我有一个 ImageButton ,带有 TranslateX 动画从右到左动画,就像Merquee一样,所以它从右到左动画。现在当我点击时没有发生任何事情。实际上点击不执行,只点击图像按钮实际位置

该怎么办?非常赞赏...谢谢

3 个答案:

答案 0 :(得分:1)

截至目前,改变视图矩阵的动画仅更改绘制视图的坐标,而不更改视图在布局中的实际位置。因此,当调用该视图的onDraw()时,它只是一个画布变换。

因此,你可以setTranslationX(100)和视图将向右绘制100个像素。但是,点击区域(getHitRect())仍然位于布局传递上分配给视图的同一位置。

或者,您可以将视图放置在动画后的位置,然后反向运行动画。

如果您想要实际更改布局,则必须更改该视图的LayoutParams并更改其宽度/高度/边距。然后你必须在每一帧动画上requestLayout()

示例:这将为FrameLayout内的视图的左边距设置动画:

  //---assuming animated view is a child of Framelayout---
   FrameLayout parent;
   View animatedChild;

    ValueAnimator animator = new ValueAnimator();
    animator.setFloatValues(0,parent.getWidth()); //--slide out to right--
    animator.setDuration(1000);
    animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
        @Override
        public void onAnimationUpdate(ValueAnimator valueAnimator) {
            FrameLayout.LayoutParams params = animatedChild.getLayoutParams();
            Float margin = (Float) valueAnimator.getAnimatedValue();
            params.leftMargin = margin.intValue();
            animatedChild.requestLayout();
        }
    });

    animator.start();

答案 1 :(得分:1)

使用ObjectAnimator(对于更高版本,然后是Honeycomb)用于Animatinfg你的对象,你可以使用以下代码作为参考:

RelativeLayout layout = (RelativeLayout) findViewById(R.id.relativeLayout1);
    Display display = getWindowManager().getDefaultDisplay();
    int width = display.getWidth();
    ObjectAnimator mover = ObjectAnimator.ofFloat(layout, "translationX",
            width, -width);
    mover.setDuration(10000);
    mover.setRepeatMode(Animation.INFINITE);
    mover.setRepeatCount(Animation.INFINITE);
    mover.start();

如果您正在使用Api,那么HoneyComb(如姜饼)则使用此库:http://nineoldandroids.com/

它将在我的设备中工作。

答案 2 :(得分:0)

在开发我的Android应用程序之前,我遇到了类似的问题。我发现动画正在运行时,它实际上正在使图像层流动。因此,您需要单击按钮的原始位置,这意味着如果按钮已开始移动,您可能需要单击黑色空间。