繁体   English   中英

android-立即开始为视图添加动画

[英]android - start animating a view immediately

我正在制作一个android应用程序,我是开发中的新手。

我使用从O%大小缩放到100%大小并同时旋转的应用程序图标为该应用程序创建了启动动画。 没问题。 但是我有一个问题。 在xml中,视图可见性最初设置为消失。 在代码中,我调用image.setVisibility(View.VISIBLE) ,然后image.startAnimation(iconAnimation) 但是结果是我可以在开始动画之前看到ImageView的闪光,大约半秒钟左右。 您可以看到gif。

Gif: 查看gif

你能帮我吗? 提前致谢。

我的代码:

runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    // here 
                    image.setVisibility(View.VISIBLE);
                    image.startAnimation(imageAnim);
                    //also found this somewhere, didn't help.
                    image.invalidate();
                }
            });

布局xml:

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:textSize="35sp"
    android:text="Kytky"
    android:layout_centerInParent="true"
    android:id="@+id/welcome_text"
    android:visibility="gone"/>
<ImageView
    android:layout_width="200dp"
    android:layout_height="200dp"
    android:src="@mipmap/ic_launcher"
    android:layout_centerInParent="true"
    android:id="@+id/welcome_image"
    android:visibility="gone"/>

您可以在动画开始时切换视图可见性

imageAnim.setAnimationListener(new Animation.AnimationListener() {
      @Override
      public void onAnimationStart(Animation animation) {
        image.setVisibility(View.VISIBLE);
      }

      @Override
      public void onAnimationEnd(Animation animation) {

      }

      @Override
      public void onAnimationRepeat(Animation animation) {

      }
    });

    image.startAnimation(imageAnim);

之所以会发生闪烁,是因为视图的可见性远非开始播放动画,因此在第一帧中它将具有其实际大小,然后开始播放动画

您可以改用值动画器,也可以遍历动画

    imageView.setPivotX(viewCenterX);
    imageView.setPivotY(viewCenterY);
    imageView.setScaleX(0);
    imageView.setScaleY(0);

    final FloatEvaluator scaleEvaluator = new FloatEvaluator();
    final FloatEvaluator rotationEvaluator = new FloatEvaluator();
    ValueAnimator valueAnimator = ValueAnimator.ofFloat(0, 1f);
    valueAnimator.setDuration(TimeUnit.SECONDS.toMillis(1));
    valueAnimator.setInterpolator(new DecelerateInterpolator());
    valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
        @Override
        public void onAnimationUpdate(ValueAnimator animation) {
            float fraction = animation.getAnimatedFraction();
            float scale = scaleEvaluator.evaluate(fraction, 0f, 1f);
            float rotation = rotationEvaluator.evaluate(fraction, 0f, 360f);
            imageView.setScale(scale);
            imageView.setRotation(rotation);
        }
    });
    valueAnimator.start();

启动另一个动画师,或使用同一动画师向上滑动徽标。 使用此动画器,您将完全控制动画。

您还需要使用alpha ...使其可见,并将in设置为最小值,而不是使用in处理器将alpha逐渐设置为最大值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM