2016-09-06 4 views
0

Я делаю приложение для Android и я новичок в разработке.android - начать анимацию сразу же

Я создал анимацию запуска для приложения, используя значок приложения, который масштабируется от размера O% до 100% и поворачивается в одно и то же время. Это работает хорошо. Но у меня проблема с этим. В xml видимость вида сначала отключена. В коде я звоню image.setVisibility(View.VISIBLE), а затем image.startAnimation(iconAnimation). Но в результате я вижу вспышку ImageView до того, как она начнет анимацию, примерно полсекунды или около того. Вы можете увидеть gif.

Gif: 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(); 
       } 
      }); 

Layout 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"/> 
+0

Попробуйте: 'android: visibility =" invisible "' – Shaishav

ответ

0

Вы можете использовать значение мультипликатора вместо этого, вы можете взломать через анимации

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(); 

Start еще один аниматор или использовать этот же аниматора скользить логотип вверх. Используя эти аниматоры, вы будете иметь полный контроль над своей анимацией.

1

вы можете переключать видимость просмотра, когда анимация начинается

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); 

мерцание происходит потому, что видимость вид далеко от начиная с анимации, поэтому в первом кадре он будет иметь свой реальный размер, и после этого начнется a nimation

0

Вам также необходимо работать с альфой ... сделать его видимым и установить альфа на минимальное значение, чем установить альфа постепенно до максимального значения с помощью обработчика.

Смежные вопросы