【问题标题】:ImageView as a splash screen not workingImageView 作为启动画面不起作用
【发布时间】:2016-04-28 13:17:04
【问题描述】:

我的 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 文件夹并从启动活动中显示良好。 缺少什么?

【问题讨论】:

    标签: android android-layout imageview


    【解决方案1】:

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

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

    并在可绘制目录 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】:

      在你的 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);
      

      【讨论】:

      • 问题是什么?图像是否模糊或根本没有加载@LawfulChaotic
      • 您的图片保存在哪个文件夹中?
      • 在 res\drawable 文件夹中。它的原始大小是 1536x2048,虽然我尝试将其设置为 800x1280(测试设备分辨率),并将其复制到各种 drawable-xhdpi 文件夹中
      • 我没有得到各种drawable-xhdpi文件夹?您应该只有一个 drawable-xhpi 文件夹。请给出正确的文件夹名称。
      • 对不起,我的意思是 res\drawable-mdpi、res\drawable-hdpi、res\drawable-xhdpi、res\drawable-xxhdpi 文件夹。
      【解决方案3】:
      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);
          }
      }
      

      【讨论】:

      • 这样,在主活动开始前闪屏显示一秒钟,然后再次显示黑屏。因此,它只是为用户增加了另一秒钟的等待时间。初始屏幕需要在初始化期间可见,而不是在初始化之前。此外,我需要一种方法在启动实际渲染时从主要活动中消除启动画面,而不是固定 SPLASH_DISPLAY_LENGHT 时间。
      • 尝试增加闪屏显示的大小
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-06-15
      • 2022-12-20
      • 1970-01-01
      • 1970-01-01
      • 2014-11-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多