android的多分辨率支持机制 由anyDensity设置导致OpenGL贴图不能显示的问题谈开

来源:互联网 发布:java在线鲜花销售系统 编辑:程序博客网 时间:2024/06/07 00:36

前段时间给员工做培训,做了不少OpenGL下面的Demo,不过onSurfaceChanged 获取的width 和height和屏幕尺寸适中不符合

终于找到了 <supports-screens android:anyDensity="true"/>  设置,获取的尺寸和屏幕相符了

但是,贴图却不能显示了,全部变白

实机截图

模拟器运行效果


调查思考了一下原因,我觉得应该是样:

Android平台中,当程序在manifest中设置android:anyDensity="true"后,系统会对创建的bitmap进行缩放,缩放的根据就是Density

而在设备上,opengl的贴图大小必须是2的N次方,模拟器因为是软件模拟,对贴图尺寸没有严格要求。我的图片本来是512*512的,但是被自动缩放后,尺寸就不标准了,所以造成贴图没有成功

通过调试确认了这一想法

   bitmap = BitmapFactory.decodeResource(mContext.getResources(), id + i);
   int w = bitmap.getWidth();
   int h = bitmap.getHeight();

不设置 android:anyDensity="true", w h 为512, 设置后 变为了768

然后,我将所有的图片资源,都放到了drawable-hdpi目录下,再运行程序,这次尺寸没有改变,贴图正常了。


基于这个问题,这里深入探讨一下android的多分辨率支持机制。

android SDK文档中  android-sdk-windows/docs/guide/practices/screens_support.html,说的其实比较清楚,不过由于是英文的,大家估计通读理解的人并不多,网上说到多分辨率支持,也就是





原创粉丝点击