在android中添加和动画imageViews时的奇怪行为

时间:2016-01-20 16:02:14

标签: android animation imageview pivot center

我有一个带背景位图的LinearLayout。我用动画为这个版面添加了2-3个图像。问题是:每当我添加图像时,FIRST图像动画从左上角开始,对于该动画之后的所有其他图像,它从中心开始工作得很好。我挣扎了好几天才找到解决这个小烦人的问题的方法。你有什么可能导致这个的建议吗?

这是我在gif中的问题:http://imgur.com/FCPgof1

我的动画:`

<scale
    android:duration="750"
    android:fillAfter="false"
    android:fromXScale="0"
    android:fromYScale="0.0"
    android:interpolator="@android:anim/accelerate_decelerate_interpolator"
    android:pivotX="50%"
    android:pivotY="50%"
    android:toXScale="1.0"
    android:toYScale="1.0" />

`

我的布局:

<LinearLayout
   android:id="@+id/layoutCompareUppoints"
   android:layout_width="140dp"
   android:layout_height="28dp"
   android:background="@drawable/uppballsbgnew" >
</LinearLayout>

我的代码: `private void animUppointsBefore(){

    if (k < Integer.valueOf(uppoints)) {

        Animation a = AnimationUtils.loadAnimation(this,
                R.anim.debug_grow_fast_animation);


    ImageView upp = new ImageView(this);
    upp.setImageResource(R.drawable.uppballlightnew);
    upp.setAdjustViewBounds(true);
    uppLayout.addView(upp);
    upp.startAnimation(a);
    a.setAnimationListener(new AnimationListener() {

        @Override
        public void onAnimationStart(Animation a) {
            // TODO Auto-generated method stub

        }

        @Override
        public void onAnimationRepeat(Animation a) {
            // TODO Auto-generated method stub

        }

        @Override
        public void onAnimationEnd(Animation a) {
            // TODO Auto-generated method stub

            k++;
            animUppointsBefore();

        }
    });

    }

}`

1 个答案:

答案 0 :(得分:0)

您最有可能看到的问题是,在实际发生任何动画之前,图像会被添加到布局中。图像将开始全尺寸,缩小到0,然后长到1。

您要做的是在添加它之前使其不可见,然后使其显示在屏幕外。您可以使用几种方法,通常的方法是将ImageView设置为View#INVISIBLE,然后设置为Animation#AnimationListener,在动画启动时将视图设置为View#VISIBLE

如果可以,使用Animators会更容易(支持库中有一些库不允许这样做)。您可以在添加之前将View的Alpha设置为0,然后在动画中立即将其设置为1。只需制作两个ObjectAnimators,一个用于alpha,一个用于缩放,然后将它们合并为一个AnimatorSet

编辑:

将评论的最终答案放在这里。

不是在动画制作之前添加视图,而是将图像视图放在布局中但不可见。这样,就不需要新的布局和测量通道,可能会将测量结果拧到枢轴点。