Я делаю приложение для Android, и я новичок в разработке.
Я создал анимацию запуска для приложения, используя значок приложения, который масштабируется от размера O% до размера 100% и одновременно вращается. Это работает нормально. Но у меня с этим проблема. В xml видимость вида изначально отключена. В коде я вызываю image.setVisibility(View.VISIBLE)
, а затем image.startAnimation(iconAnimation)
. Но в результате я могу видеть вспышку ImageView до того, как он начнет анимацию, примерно на полсекунды или около того. Вы можете увидеть гифку.
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"/>
3 ответа
Вместо этого можно использовать аниматор значений, можно взломать анимацию
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();
Запустите еще один аниматор или используйте тот же аниматор, чтобы сдвинуть логотип вверх. Используя эти аниматоры, вы получите полный контроль над своей анимацией.
Вы можете переключать видимость вида при запуске анимации
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);
Мигание происходит потому, что видимость вида далека от запуска анимации, поэтому в первом кадре он будет иметь свой реальный размер, а после этого запускается анимация
Вам также нужно работать с альфой ... сделайте его видимым и установите альфа на минимальное значение, чем постепенно установите альфа на максимальное значение с помощью обработчика in.
Похожие вопросы
Новые вопросы
android
Android — это мобильная операционная система Google, используемая для программирования или разработки цифровых устройств (смартфонов, планшетов, автомобилей, телевизоров, одежды, очков, IoT). Для тем, связанных с Android, используйте теги, специфичные для Android, такие как android-intent, android-activity, android-adapter и т. д. Для вопросов, отличных от разработки или программирования, но связанных с Android framework, используйте эту ссылку: https://android .stackexchange.com.