flex itemRenderer使用 五 效率

2021-08-30 14:28:17 字數 3195 閱讀 8068

•限制使用 itemrenderer 的列數。是否真的需要將每個列作為自定 itemrenderer?有時需要這樣, 光芒太強是否會令使用者頭暈眼花?

•嘗試不要過於頻繁地更改 itemrenderer 中元素的樣式。如果需要切換樣式 (例如, 綠色用於正值, 紅色用於負值) , 可考慮為這些樣式建立兩個控制預設並使其中乙個可見。更改樣式 flex 中比較費時的任務之一。

•不要將 containers 用作 itemrenderer 的基礎。容器會占用大量資源。少量使用它們, 效果還不錯; 但是根據 uicomponent 編寫 itemrenderer 效率更高。

以下 itemrenderer 根據資料字段的值切換元件。

這比設定樣式要快。要注意的其他事項包括:

•避免資料繫結到樣式。更改樣式不僅比大多數操作要慢, 而且在它上面新增資料繫結**只會使它更糟。

•使用 canvas 或擴充套件 listitemrenderer 或作為 itemrenderer 的根。這允許您將控制放在各自上方。

[color=red][b]擴充套件 uicomponent[/b][/color]

目前編寫 itemrenderer 最有效的方式是使用 actionscript 類擴充套件 uicomponent。您可以全面控制**, 並且渲染器也可以盡可能高效。

從上例切換樣式開始, 編寫乙個擴充套件 uicomponent 的簡單 itemrenderer。

package renderers

}}

您會發現我不僅編寫這個類來擴充套件 uicomponent, 還由它實施 ilistitemrenderer 介面。這樣做是有必要的, 因為 list 控制將需要任何渲染器實施該介面, 否則您會收到執行時錯誤, 因為列表嘗試將渲染器轉換為該介面。

如果閱讀 ilistitemrenderer 的相關文件, 您會發現這是乙個許多其他介面的集合, uicomponent 會為您實施其中的大多數。但有乙個 ilistitemrenderer 擴充套件的介面是 uicomponent 不實施的:idatarenderer。這需要您新增**, 為 itemrenderer 類提供您一直使用的 data 屬性。

如果您嘗試不實施 idatarenderer 就使用這個類, 則編譯**時會收到以下錯誤:

•1044:類 renderers:priceitemrenderer 未實施命名空間 mx.core:idatarenderer 中的介面方法 get data。

package renderers

// internal variable for the property value.

private var _data:object;

// make the data property bindable.

[bindable("datachange")]

// define the getter method.

public function get data():object

// define the setter method, and dispatch an event when the property

// changes to support data binding.

public function set data(value:object):void

}}

我直接使用 idatarenderer 的 flex 文件中的**, 這樣您都不用自己鍵入它。

移除它後, 您可以加入兩個標籤。

1.新增變數用於存放這兩個標籤。

private var poslabel:label; private var neglabel:label;

2.將 set data 函式修改為呼叫 invalidateproperties()。這很重要, 因為更改資料必須更改標籤中的文字以及它們的可視性。

public function set data(value:object):void

呼叫 invalidateproperties() 會告知 flex 框架在適當的時間呼叫 commitproperties() 函式。

3.覆蓋 createchildren() 並建立標籤, 新增它們以顯示元件列表。注意, 除了建立標籤外, 還會設定它們的樣式和 visible 屬性。

override protected function createchildren() : void        

override protected

function commitproperties():void

5.覆蓋 updatedisplaylist() 以設定標籤大小並進行定位。您必須設定標籤大小, 因為它們的預設大小為 0×0。這是 container 類將為您做的另一件事。由於這個 itemrenderer 十分簡單, 您只需將標籤大小設定為與 itemrenderer 大小匹配即可。

override protected function updatedisplaylist(

unscaledwidth:number, unscaledheight:number ) : void

所有這些只能做到這點似乎有點複雜, 但是請記住一點, 使用容器增加的**要比這多得多。

uicomponent 類是所有可視 flex 元件 (控制和容器) 的基礎。以下是將 uicomponent 用作 itemrenderer 的一些相關提示。

•uicomponent 對其子代 (如 container) 沒有版面限制。您必須自己進行子代定位並調整大小。

•還可以超出 updatedisplaylist() 中指定的大小繪製圖形和位置子代。

•如果準備在列表中使用 variablerowheight, 您還應覆蓋 measure() 函式, 告知列表 itemrenderer 有多大。

•要將 uicomponent 用作 itemrenderer, 您必須實施 idatarenderer。

•要使用 listdata 屬性, 您必須實施 idropinlistitemrenderer; 本系列之前的文章中討論過這個操作。

使用CADisplayLink實現果凍效果動畫

cadisplaylink是什麼 比起nstimer,cadisplaylink可以確保系統渲染每一幀的時候我們的方法都被呼叫,從而保證了動畫的流暢性。demo 我們希望在animate乙個view的時候給它加上果凍效果 我們會把所有的邏輯都封裝到乙個blockview裡,在這個view裡首先申明乙...

提效工具git的基本使用

安裝就不廢話了,各種操作平台安裝見官網就行。以windows為例,首先開啟git bash 即git的終端 這裡我在d盤建立了乙個名為 gittut 的資料夾。git config global user.name jadenneal 使用者名稱 git config global user.ema...

Android 使用shape來優化介面效果

前些天去參加了乙個公開課,說到了我們很多程式對美工比較不在行,所以需要與ui工程師合作,但是有時候ui工程師忙其他的什麼,我們既不會ps也不會ai。於是乎在android中我們可以通過shape來定製我們需要的圖形效果等。下午研究了下shape,眾所周知shape是形狀的意思。網路上的例子太多看的真...