• Android高仿微信(一)——如何消除启动时的白屏


          默认情况下,APP启动时会先把屏幕刷成白色,然后才绘制第一个Activity中的View,这两个步骤之间的延迟会造成启动后先看到白屏(时间大概为1秒左右)。时间不长,但是我们也看到,一般的APP时不存在这个现象的,那么这个现象如何消除呢?

          从网上得到了一些解决方案,主要的两种方式包括:在AppTheme中将“android:windowBackground”属性设置为背景图片;或者,将"android:windowIsTranslucent"设置为true。

          在“高仿微信”这个项目中实验时,为了延长启动图片的时间,添加了一个StartActivity(里面有一个ImageView显示启动图片),启动时启动StartActivity,定时3秒后,跳转到MainActivity。

          用第一种方式,由于图片的放大比例不一致,导致白屏与StartActivity切换时背景出现变形。

          为了避免上述的缺点,采用第二种方法,问题得到完美解决(真机测试无异)。

    1、styles.xml中的设置

    1     <!-- Base application theme. -->
    2     <style name="AppTheme" parent="android:Theme.Holo.Light.NoActionBar">
    3         <item name="android:windowIsTranslucent">true</item>
    4     </style>

    2、StartActivity

    activity_layout.xml:

    注意,这里用了ImageView来显示背景图片,并且设置scaleType属性为"centerCrop",这样得到的效果是最好的。

    也可以直接设置RelativeLayout的background属性,但是这样,图片会有点变形,可能是因为图片和真机屏幕的大小不完全匹配。

     1 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
     2                 xmlns:tools="http://schemas.android.com/tools"
     3                 android:layout_width="fill_parent"
     4                 android:layout_height="fill_parent"
     5                 tools:context="tina.myweixin2.StartActivity">
     6     <ImageView
     7         android:layout_width="match_parent"
     8         android:layout_height="match_parent"
     9         android:src="@drawable/appstart"
    10         android:scaleType="centerCrop"/>
    11 
    12 </RelativeLayout>

    StartActivity.java:

    这里,用了Timer来实现定时的效果。

     1 import android.app.Activity;
     2 import android.content.Intent;
     3 import android.os.Bundle;
     4 import java.util.Timer;
     5 import java.util.TimerTask;
     6 
     7 
     8 public class StartActivity extends Activity {
     9 
    10     @Override
    11     protected void onCreate(Bundle savedInstanceState) {
    12         super.onCreate(savedInstanceState);
    13         setContentView(R.layout.activity_start);
    14 
    15         Timer timer=new Timer();
    16         timer.schedule(new TimerTask() {
    17             @Override
    18             public void run() {
    19                 startActivity(new Intent(StartActivity.this,MainActivity.class));
    20                 StartActivity.this.finish();
    21             }
    22         },1000);
    23     }
    24 }

        

  • 相关阅读:
    SQL SERVER 将表字段值0和1互转的几种方法
    JS 解决 IOS 中拍照图片预览旋转 90度 BUG
    Js利用Canvas实现图片压缩
    IIS 下调用证书出现异常解决方案 (C#)
    C# 如何防止重放攻击
    RSA,JAVA私钥加密,C#公钥解密
    C# 字符串按 ASCII码 排序,注意其中的小坑
    C# dynamic类型报错:“object”不包含“xxx”的定义
    Angularjs 实现移动端在线测评效果
    C# 利用VS自带的WSDL工具生成WebService服务类
  • 原文地址:https://www.cnblogs.com/tt2015-sz/p/4909323.html
Copyright © 2020-2023  润新知