Jan*_*ela 9 android background android-viewpager
我正在使用viewpager在我的应用程序中的片段之间滑动.我在XML中定义了背景,所以
android:background="@drawable/bg_final"
Run Code Online (Sandbox Code Playgroud)
如果我使用简单的背景颜色,我的应用程序非常流畅.如果我将它与此背景图像一起使用,fps会减少,我的应用程序也只能通过.它并不慢,只是不那么顺利,但是在较弱的设备上它可能会工作迟缓.这是一种应用背景图像的坏方法吗?整个图像是480x800 png,大小为14.7kB.可能是什么问题?
(片段的背景是透明的,viewpager在main.xml中,它具有此图像的背景)
Chr*_*geb 12
有很多答案指出预先缩放你的位图.这非常有意义,如果可以,你应该这样做,但是在尝试了几个不同的东西后,我遇到的最大的性能提升是创建一个视图并覆盖onDraw方法.
这个类可以这么简单:
public class DTImageView extends View {
public Bitmap imageBitmap;
public DTImageView(Context context) {
super(context);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
if(imageBitmap != null)
canvas.drawBitmap(imageBitmap, 0, 0, null);
}
}
Run Code Online (Sandbox Code Playgroud)
使用预分频位图调用代码:
DTImageView bgImageView = new DTImageView(context);
bgImageView.imageBitmap = Bitmap.createScaledBitmap(bitmap,width,height,true);
Run Code Online (Sandbox Code Playgroud)
此时,您可以将此视图添加到它所属的视图层次结构中.在我的例子中,我的视图层次结构有一个bgImage,一个中间地点,其他所有功能都发生了,和fgImage.
使用android sdk工具层次结构查看器来分析应用程序,并查看每个视图绘制的速度.我的应用花了30-40ms绘制了bgImage和fgImage.预渲染和覆盖onDraw将30-40ms减少到大约1.5ms.
以下是我之前和之后的一个视图的Draw性能截图:
之前:

后:

我有点迟了,但这只是我的意思,在运行GPU调试器时,我注意到系统放大了我的图像!我有一个1920x1080的图像,它显示为3780x6720纹理!
理想情况下,你应该有纹理在各自的文件夹(每个密度res/drawable-mdpi,res/drawable-hdpi等等).
但是,如果您认为您的一个纹理很好,请将其放入res/drawable-nodpi,而不是 res/drawable.如果你把它放入res/drawable-nodpi,系统将不会根据dpi进行扩展.
在我的例子中,它将一个简单的UI从Pixel XL上的10fps更改为60fps的全帧速率.
| 归档时间: |
|
| 查看次数: |
8047 次 |
| 最近记录: |