视图的背景是根据视图的大小自动调节的。不管图像的尺寸是多大,如果图像做为视图的背景的时候,图像会自动缩放来匹配填充视图的大小。当视图大小和背景图片的尺寸不匹配的的时候,系统会自动的缩放图片。这样的自动调整如果多次甚至大量的出现在我们的应用中,那么势必会造成程序加载到延时、效率降低。 那么我们如何尽量的避免自动缩放呢?
一、提供的背景图片正好和视图的大小一致
我们在制作程序的时候选择的背景图片正好和视图的大小一致,这样可以避免背景图标的自动缩放。
有些时候我们受到一些因素的制约可能做不到这一点。例如横竖屏的差异、图片来源不受我们控制等等原因。那么这个时候我们可以考虑将图片进行预先缩放。
二、背景图片预先缩放,减少缩放次数。
预先缩放图片之后,在视图每次显示的时候就不是每次都去缩放图片,而是采用我们预先缩放好的图片,可以提高效率。
背景图片采用预先缩放的技巧和自动缩放的frame刷新频率比较如下:
自动缩放的刷新频率是每秒25个frame,预先缩放技巧的刷新率是每秒50个frame 。效率提高了50%
2、窗口背景的优化
视图有背景,每个窗口也是有背景的。每一Activity是一个窗口,每一个Activity都有不同得背景。界面的绘画顺序如下:窗口——跟视图 ——子视图。当我们的跟视图已经覆盖了整个窗口的时候 ,程序还是会画一个透明的窗口的背景,而这个背景用户是看不到的。我们就需要想办法让程序在这样的情况下去掉窗口背景,节约画窗口背景的时间提高效率。
删除窗口背景的方法:
一、java代码中
publicvoid onCreate(Bundle icicle){ super.onCreate(icicle); setContentView(R.layout.mainview); // 删除窗口背景 getWindow().setBackgroundDrawable(null); ... }
二、在xml文件中
首先在res/values/style.xml 文件中定义如下:
<resources>
<style name="NoBackgroundTheme" parent="android:Theme">
<item name="android:windowBackground">@null</item>
</style>
</resources>
然后在AndroidManifest.xml文件中找到要去掉背景的activity 书写代码如下:
<activity android:name="MyApplication" android:theme="@style/NoBackgroundTheme"> ... </activity>
在xml中使用时首先要检查一下:有时候NoBackgroundTheme这个参数可用。
如果画了透明的窗口背景的时候刷新频率是每秒43个frame,如果删除掉窗口背景刷新频率是53个frame。