作者:opLW
好久没写博客了,6月份结束了期末考试,又进入了忙碌而充实的秋招备战阶段。自从之前用了幕布来制作脑图,现在一发不可收拾,学点什么都要用幕布记起来?,等秋招结束了整理分享出来。
最近在做一个App,之前了解了App启动优化的一些知识,但只是简单的将背景设置为透明,这次决定自己制作一个启动页面,这不踩了不少坑,这里记录一下。

江湖规矩先上图

如上图为最终效果,由于没有美工MM帮忙切图,所以只有**画质?。

基础知识
  • 需要先了解启动优化的相关知识 网上关于启动优化的文章实在是太多了,这里就不分析了,不了解的同学自行谷歌。
  • 需要知道.9格式图片的制作 这里还是不提,可以自行谷歌。
如何制作呢?
  • 设置.9图片为windowBackground之后屏幕严重变形。 在刚接触启动优化时,了解到可以通过
    <item name="android:windowBackground">@drawable/bg_welcome</item>
    将.9格式的图片设置为启动页面的背景图,于是满心欢喜的就做了一张.9格式的图片,并将按上述要 求添加到App的style中,结果如下:

    很是尴尬?屏幕的显示内容严重变形。

  • 解决办法 谷歌了一圈找到了解决办法

    // style.xml文件
    <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar"><!-- Customize your theme here. --><item name="colorPrimary">@color/colorPrimary</item><item name="colorPrimaryDark">@color/colorPrimaryDark</item><item name="colorAccent">@color/colorAccent</item></style>==1== //创建一个新的SplashTheme继承自AppTheme<style name="SplashTheme" parent="AppTheme"><item name="colorPrimary">@color/colorPrimary</item><item name="colorPrimaryDark">@color/colorPrimaryDark</item><item name="colorAccent">@color/colorAccent</item><item name="android:windowBackground">@drawable/bg_welcome</item></style>
    // AndroidManifest.xml文件<application//......android:theme="@style/AppTheme"><activity//...... ==2==   android:theme="@style/SplashTheme"><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity><activityandroid:name=".ui.LoginActivity"android:label="@string/app_name" /><activityandroid:name=".ui.DetailListActivity" /></application>
    // MainActivity.kt文件override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)
    ==3== setTheme(R.style.AppTheme_NoActionBar)setContentView(R.layout.activity_main)}
    
    • 1 创建一个新的SplashTheme继承自AppTheme
    • 2 对于App启动后打开的第一个Activity,我们将它的theme设置为含有.9图片的SplashTheme
    • 前两步设置完之后,打开App会最先看到我们的.9图片。但是MainActivity的背景图片会一直保持着,而我们希望的是进入操作页面之后.9图片消失,所以就有了第三步。
    • 3MainActivity.onCreate()方法内部将theme重新设置为没有背景图片的theme。记住setTheme方法应该在setContentView方法之前调用,因为setContentView会确定好背景。
  • 优化操作

    • 如下图。制作.9图片时,将核心要显示的内容置于图片的中心,而四周使用透明的背景。
      再配合shape制作一张layer-list,具体代码如下

      <layer-list xmlns:android="http://schemas.android.com/apk/res/android">
      <item><shape android:shape="rectangle"><solidandroid:color="#fff"/></shape>
      </item>
      <item android:gravity="center"><nine-patchandroid:src="@drawable/bg_welcome"android:tileMode="disabled" />
      </item>
      </layer-list>
      

      最后将上面这个文件设为SplashThemewindowBackground即可达到开头的效果。

  • 开头效果对应的.9图片

    在适配不同分辨率时,绿色部分为可以拉伸的部分,而其他部分不会受影响。

新的认知
  • 可能大部分人跟我一样认为.9图片很神奇,可以适配不同分辨率,其实不然。(真正可以随意拉伸,分辨率不受影响的是.svg图片)。那么.9图片有什么用呢????

  • 记住一点.9格式的图片相比于普通的图片的优点,就是它指明了在需要大规模拉伸的时候,被拉动变形的部分,某种程度上解决了拉伸带来的图片严重变形的问题。(注意这里对变形的定义是:图片要显示的部分发生比率上的变化,在上面图片中来说就是人物的腿部被拉长)

  • 但是当把一张分辨率很低的.9图片置于分辨率很高的机型上时,依然会导致图片模糊,只是不会导致图片变形。所以即使是.9图片,为了适配不同分辨率的机型,依然需要制作不同分辨率的.9图片。

万水千山总是情,麻烦手下别留情。
如若讲得有不妥,文末留言告知我,
如若觉得还可以,收藏点赞要一起。

opLW原创七言律诗,转载请注明出处

Android -- 启动页面背景图片配置(splash)相关推荐

  1. Android在页面设置背景图片

    Android在页面设置背景图片 在页面上设置背景,不需要在布局中设置. 在onCreate方法中加入代码: this.getWindow().setBackgroundDrawableResourc ...

  2. Android Activity 设置背景图片

    设置Activity图片背景 Android(Activity)设置背景图片方法: xml布局中用andriod:background = "@drawable/bgimage"或 ...

  3. android启动系统的图片裁剪工具

    android启动系统的图片裁剪工具的方法 /*** 裁剪图片* @param activity 启动裁剪图片的Activity* @param uri 图片的uri路径* @param savePa ...

  4. 怎样在android中添加背景图片?

    怎样在android中添加背景图片? 1.打开左侧的工程文件夹.打开res中的layout,双击main.xml. 2.一般的图片是jpg格式的,要把格式转化为png格式的. 3.把PNG格式的图片拖 ...

  5. Android 更改纯色背景图片颜色,可实现一张背景圆形图片展示不同颜色

    Android 更改纯色背景图片颜色,可实现一张背景圆形图片展示不同颜色 项目中可能会遇到比如多个纯色圆形背景列表或者说纯色圆形头像背景,一般让UI设计师设计多张背景图:但是有更好的方法只需一张图就可 ...

  6. android 图片转换圆形 黑色背景,Android 更改纯色背景图片颜色,可实现一张背景圆形图片展示不同颜色...

    Android 更改纯色背景图片颜色,可实现一张背景圆形图片展示不同颜色 项目中可能会遇到比如多个纯色圆形背景列表或者说纯色圆形头像背景,一般让UI设计师设计多张背景图:但是有更好的方法只需一张图就可 ...

  7. css背景图不失真_CSS实现页面背景图片模糊内容不模糊的方法

    CSS实现页面背景图片模糊内容不模糊的方法,如果对你有帮助就看看吧,挺实用的一个CSS背景模糊效果,适合做一些非常唯美的网页,给人一种很模糊却又带着一丝清晰的感觉. 代码: Document .ban ...

  8. Android 聊天界面背景图片不顶上去内容顶上去解决方法

    Android 聊天界面背景图片被输入法 字数398  阅读923  评论0  喜欢14 相信做过android开发的都知道,当界面中有editText的时候,输入法可能导致把当前界面整个给顶上去,这 ...

  9. 微信小程序页面背景图片设置

    微信微信小程序页面背景图片background-image使用及大小设置 源代码//index.wxss page{ background-size:100% 100%; background-ima ...

最新文章

  1. IDEA下找不到diagrams按钮选项的解决方案
  2. sprite的大小 unity_[Unity]SpriteShape与atlas的小坑
  3. java抽象类与接口区别6_java基础知识(6)---抽象类与接口
  4. 软件测试面试的基础题目
  5. Python中xrange和range异同
  6. day 05 多行输出与多行注释、字符串的格式化输出、预设创建者和日期
  7. Swift基础加强_跟我打500行
  8. 2020年十大开源漏洞回顾
  9. 第12章第1讲位运算符与表达式
  10. C#:DataTable查询结果判断某一列为空
  11. 用计算机弹极乐净土谱,极乐净土计算器乐谱
  12. java混淆器最好_使用混淆器,保护你的java程序
  13. 大量带BPM的跑步歌曲/跑步音乐下载
  14. electron + fluent-ffmpeg推送桌面、音视频、窗口
  15. 清除HTML的超链接样式,Markdown导出HTML,删除超链接下划线和字体样式
  16. java培训班值得去吗?
  17. Python 内置模块tkinter —— 秒表计时器
  18. 通过面试思考平时的学习
  19. 递归回溯--数字分解java代码
  20. 【项目一、xxx病虫害检测项目】1、SSD原理和源码分析

热门文章

  1. eGPU 能否一战?- Tensorflow GPU 基准测试
  2. 非IT企业的IT经理如何管理IT人力资源
  3. 被阿里舍弃,2020年了,还有人在迷恋Oracle数据库?
  4. java rectangle获取xy_Day06 Java基础学习笔记
  5. php复姓怎么排序,怎样“按姓氏笔画排列”? 复姓和少数民族姓氏如何排列? 男女同名谁在前...
  6. 一文搞定子网划分!子网掩码!超详细例题解析!
  7. Simple React Snippets快捷
  8. 浅谈渗透测试人员职业发展路线
  9. EFR32晶体校准指南
  10. 2019 CCF CSP-J2 第4题:加工零件 ← 链式前向星