2011-10-09 36 views
1

我遇到了HDPI屏幕問題(在Samsung Galaxy S2上測試過)。基於Android屏幕密度損壞的OpenGL紋理(hdpi)

我有一個紋理貼圖,與OES_draw_texture 1.1擴展一起使用。這適用於MDPI屏幕,大大小小(在HTC Legend和Asus Transformer平板電腦上進行測試)。紋理貼圖被正確裁剪並且紋理正確顯示。

但是,在Galaxy S2(以及大概所有的HDPI設備)上,紋理貼圖未被正確裁剪。紋理貼圖位於/ drawable /目錄中,而minSdkVersion設置爲4,因此屏幕兼容性將不會打開。如果屏幕兼容性打開(通過將minSdkVersion設置爲3),即使在S2上也可以正常工作,因爲它正在模擬MDPI屏幕。

我的印象是,如果您要訪問可繪製資源「a」,Android會查看特定密度文件夾(在本例中爲/ drawable-hdpi /),如果找不到,則返回到/ drawable /或/ drawable-mdpi /。但是我還沒有找到文件來支持這個。

我的問題如下:

  • 什麼是Android的資源行爲的搜索?如果它無法在hdpi中找到資源,它實際上會回退到mdpi上嗎?資源?
  • 爲什麼OES_draw_texture GL-ES1.1擴展無法正確裁剪?我懷疑它與px和dp有關; draw_texture通常使用直接像素,但Android可能會嘗試使用dp,因此將所有裁剪位置乘以1.5,因爲資源位於/ drawable /文件夾中?
  • 有沒有辦法強制HDPI設備模擬MDPI而不使用屏幕兼容性?

任何知識,將不勝感激。

回答

2

From here.(當加載你的紋理)

// This will tell the BitmapFactory to not scale based on the device's pixel density: 
// (Thanks to Matthew Marshall for this bit) 
BitmapFactory.Options opts = new BitmapFactory.Options(); 
opts.inScaled = false;