由于iPhone的屏幕密度,图像资产开发得更大。因此,在指定图标和图像时,Flex组件采用此形式。
<s:ViewNavigator id="tab1" label="Tab1 width="100%" height="100%" firstView="views.Tab1">
<s:icon>
<s:MultiDPIBitmapSource source160dpi="@Embed('assets/tabIcon.png')"/>
</s:icon>
</s:ViewNavigator>
Flex当然会正确地渲染它并将大小调整到应该的大小。
然而,当我自己加载图像时,它们看起来会被炸毁,因为它们的尺寸会翻倍。
这是我在覆盖标签栏时使用它的方法。
public class TabbedViewNavigatorTabBarSkin extends ButtonBarSkin
{
[Embed (source="/assets/tabBar.png" )]
private var TabBarPng:Class;
override protected function createChildren():void
{
var bgb:Bitmap = new TabBarPng() ;
addChild(bgb);
}
}
这是图像出现爆炸的时候。我做错了什么?
答案 0 :(得分:1)
我认为你想要做的事情可以通过以下代码实现,这基本上会否定内部完成的工作,根据屏幕尺寸扩展资产,同时允许它扩展其他基于DPI的组件,我不确定这将如何在实践中发挥作用。
import mx.core.mx_internal;
...
var bgb : Bitmap = new TabBarPng();
bgb.scaleX = 1 / systemManager.mx_internal::densityScale;
bgb.scaleY = 1 / systemManager.mx_internal::densityScale;
或我认为的另一种可能性是:
var mul : MultiDPIBitmapSource = new MultiDPIBitmapSource();
mul.source160dpi = new TabBarPng();
var bgb : BitmapImage = new BitmapImage();
bgb.source = mul;
var gr : Graphic = new Graphic();
gr.width = 100 / systemManager.mx_internal::densityScale; //not sure if you'd want densityScale being applied here or what? Same below just a matter of testing on more devices
gr.height = 100 / systemManager.mx_internal::densityScale;
gr.addElement(bgb)
addChild(gr);
[来自MultiDPIBitmapSource API doc]
此类提供各种运行时密度的位图列表。它作为BitmapImage或Image的源提供,并作为Button的图标提供。组件将使用Application.runtimeDPI来选择要显示的图像。
我认为这个文档:
http://help.adobe.com/en_US/flex/mobileapps/WS19f279b149e7481c682e5a9412cf5976c17-8000.html
可能仍然是你能找到的最明确的解释,虽然它不完全清楚这会在不同设备上运行时如何影响应用程序。最好的选择是尽可能多地测试设备(或需要支持)。