android - 立即开始动画视图
android - start animating a view immediately
我正在制作一个 android 应用程序,我是开发新手。
我为应用程序创建了一个启动动画,使用从 O% 大小缩放到 100% 大小并同时旋转的应用程序图标。这行得通。但我有一个问题。在 xml 中,视图可见性最初设置为消失。在代码中,我调用 image.setVisibility(View.VISIBLE)
然后 image.startAnimation(iconAnimation)
。但结果是我可以在它开始动画之前看到 ImageView 的闪光,大约半秒钟。可以看到动图
动图:
see the 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);
闪烁的发生是因为视图的可见性远未开始动画,因此在第一帧中它将具有其真实大小,然后开始动画
您还需要使用 alpha...使其可见并将 alpha 设置为最小值,而不是在处理程序中将 alpha 逐渐设置为最大值。
你可以改用 value animator,你可以破解动画
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();
再启用一位动画师或使用同一位动画师将徽标向上滑动。使用此动画师,您将可以完全控制您的动画。
我正在制作一个 android 应用程序,我是开发新手。
我为应用程序创建了一个启动动画,使用从 O% 大小缩放到 100% 大小并同时旋转的应用程序图标。这行得通。但我有一个问题。在 xml 中,视图可见性最初设置为消失。在代码中,我调用 image.setVisibility(View.VISIBLE)
然后 image.startAnimation(iconAnimation)
。但结果是我可以在它开始动画之前看到 ImageView 的闪光,大约半秒钟。可以看到动图
动图: see the 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);
闪烁的发生是因为视图的可见性远未开始动画,因此在第一帧中它将具有其真实大小,然后开始动画
您还需要使用 alpha...使其可见并将 alpha 设置为最小值,而不是在处理程序中将 alpha 逐渐设置为最大值。
你可以改用 value animator,你可以破解动画
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();
再启用一位动画师或使用同一位动画师将徽标向上滑动。使用此动画师,您将可以完全控制您的动画。