在最初看不见时淡入

时间:2015-04-05 06:55:13

标签: android animation imageview

按照指南进行操作:https://stackoverflow.com/a/5090470/512998 我已成功为我的imageView实现淡入淡出动画。然而,imageView最初是可见的,当动画开始时它只是闪烁变为不可见(alpha = 0.0)并慢慢淡入回到alpha = 1.0。这里的问题是,如何设置imageView最初不可见?

我尝试将xml布局中的可见性更改为INVISIBLEGONE,但动画无效。它将在最终结果中显示为空白imageView。

我还尝试在xml布局中更改imageView的alpha级别,但结果表明动画很奇怪,因为它适用于我配置的alpha级别。例如,如果我将alpha级别设置为0.3,则动画将在0.0到0.3之间淡入淡出。如果我将其设置为0.0,则看起来没有动画,并且最后不会显示图像。

以下是我的代码片段:

动画/ fade_in_view.xml

<?xml version="1.0" encoding="UTF-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <alpha 
        android:fromAlpha="0.0"
        android:toAlpha="1.0" 
        android:interpolator="@android:anim/accelerate_interpolator" 
        android:duration="1000"
        android:repeatCount="0" />
</set>

布局/ activity_splash.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#000000" >

    <ImageView
        android:id="@+id/imgCharacter"
        android:layout_width="160dp"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_alignParentRight="true"
        android:layout_below="@+id/imgLogo"
        android:src="@drawable/darth_vader" />

</RelativeLayout>

的src / MainActivity.java

protected void onCreate(Bundle savedInstanceState)
{
    ...
    imageView = (ImageView) findViewById(R.id.imgCharacter);

    new Handler().postDelayed(new Runnable()
    {
        @Override
        public void run()
        {
            Animation fadeInAnimation = AnimationUtils.loadAnimation(SplashScreen.this, R.anim.fade_in_view);
            imageView.startAnimation(fadeInAnimation);
        }
    }, 1000);
}

1 个答案:

答案 0 :(得分:1)

替换您的新处理程序方法

new Handler().postDelayed(new Runnable() {
            @Override
            public void run() {
                Animation fadeInAnimation = AnimationUtils.loadAnimation(
                        MainActivity.this, R.anim.fade_in_view);
                imageView.startAnimation(fadeInAnimation);
                fadeInAnimation.setAnimationListener(new AnimationListener() {

                    @Override
                    public void onAnimationStart(Animation animation) {
                        imageView.setVisibility(View.VISIBLE);
                    }

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

                    }

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

                    }
                });
            }

        }, 1000);

和activity_splash.xml

set imageview visibility to invisible