ImageView作为启动画面无法正常工作

时间:2016-04-28 13:17:04

标签: android android-layout imageview

我的Android应用程序需要一些时间来初始化,并且我想在加载屏幕出现之前显示启动图像并在之后隐藏它。我搜索了stackoverflow并找到了一些解决方案。我试着关注this tutorial,它解释了如何实现在启动活动中启动的正确启动画面,但它并没有解决我的问题,因为在启动画面和启动画面之间仍然有几秒黑屏加载屏幕(从C ++代码的单独线程渲染,并且必须在渲染开始之前初始化一堆东西,请不要求更改该部分,它是跨平台的C ++引擎)。接下来,我尝试使用ProgressDialog taken from here,在主要活动的onCreate中启动它,并在C ++部分开始实际渲染时隐藏,并且除了不是启动图像之外它工作正常。但时机正是我所需要的。然后我用ImageView替换它并且它不起作用(没有显示图像)。

protected void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    //...
    mImageView = new ImageView(this);
    mImageView.setScaleType(ScaleType.FIT_XY);
    mImageView.setImageResource(R.drawable.splash_bg);
    setContentView(mImageView);
}

splash_bg.png被放入res / drawable文件夹,并从splash活动中显示正常。 缺少什么?

3 个答案:

答案 0 :(得分:1)

xml for splash screen.  

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <ImageView
        android:id="@+id/imageView1"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@drawable/ic_splash_screen" />

</RelativeLayout>

In MainActivity 



public class Splash extends Activity {

    private final int SPLASH_DISPLAY_LENGHT = 1000;

    @Override
    public void onCreate(Bundle icicle) {
        super.onCreate(icicle);
        setContentView(R.layout.splashscreen);

        new Handler().postDelayed(new Runnable() {
            @Override
            public void run() {
                Intent mainIntent = new Intent(Splash.this,
                        MainActivity.class);
                Splash.this.startActivity(mainIntent);
                Splash.this.finish();
            }
        }, SPLASH_DISPLAY_LENGHT);
    }
}

答案 1 :(得分:1)

您应该为您的启动活动制作主题,例如:

<style name="AppTheme.Splash" parent="YOURMAIN_THEME">
        <item name="android:windowBackground">@drawable/splash_bg</item>
</style>

在drawable目录splash_bg.xml中创建你的启动,如:

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:drawable="@drawable/splash_background"/>
    <item
        android:top="30dp">
        <bitmap
            android:gravity="top"
            android:src="@drawable/demo_logo"
            />
    </item>
    <item>
        <bitmap
            android:gravity="center"
            android:src="@drawable/demo_emlogo"/>
    </item>
</layer-list>

答案 2 :(得分:0)

在onCreate(Bundle savedInstance)方法中添加以下行:

mImageView = new ImageView(this);
    mImageView.setScaleType(ScaleType.FIT_XY);
    mImageView.setImageResource(R.drawable.splash_bg);
LayoutParams imageViewLayoutParams 
         = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
        mImageView.setLayoutParams(imageViewLayoutParams);