Я использую собственную обложку Flex для создания активного эффекта размытия / матового стекла на фоне плавающих панелей, TitleWindows и других контейнеров (аналогично http://www.pixelfumes.com/blog/apr07/activeBlurClass.html). В обложке приложения есть фоновое изображение, и, возможно, любое количество других компонентов выше и ниже активного компонента размытия. Вот некоторый соответствующий код в скине:
public static const BLUR_FILTER :BlurFilter = new BlurFilter(16, 16, BitmapFilterQuality.HIGH);
private var _bitmapFill :BitmapFill = new BitmapFill;
private var _matrix :Matrix = new Matrix;
protected function handleEnterFrameEvent (event :Event) :void {
var bitmapData :BitmapData,
matrix :Matrix;
// only run if component has width and height
if (unscaledWidth && unscaledHeight) {
bitmapData = new BitmapData(unscaledWidth, unscaledHeight, false);
// use the component's transform matrix to source the area to draw
matrix = transform.concatenatedMatrix;
_matrix.tx = -matrix.tx;
_matrix.ty = -matrix.ty;
// hide component to draw what's behind it
visible = false;
// this is the performance hit: draw the application to a bitmap
bitmapData.draw(IBitmapDrawable(parentApplication), _matrix);
visible = true;
bitmapData.applyFilter(bitmapData, bitmapData.rect, new Point, BLUR_FILTER);
_bitmapFill.source = bitmapData
backgroundRect.fill = _bitmapFill;
}
}
К сожалению, производительность при изменении размера компонента, особенно при перемещении, низкая. Существует заметная задержка перетаскивания и общее замедление, и это только с одним всплывающим TitleWindow в тестовом приложении. Особенно низкая производительность при изменении компонентов внутри окна TitleWindow (состояния наведения кнопок и т. Д.)
Я попытался немного оптимизировать, избегая повторного использования фильтра размытия, заливки растрового изображения и матрицы, но это мало или совсем не дало эффекта. В какой-то момент я удалил размытие, просто нарисовав приложение в растровом изображении, и производительность все еще остается низкой, поэтому ясно, что это в основном вызов BitmapData.draw ().
Я читал об использовании scrollRect и cacheAsBitmap, но я не уверен, где применять эти свойства (или другие оптимизации, которые мне неизвестны) в Приложении или его компонентах.
Я некоторое время занимался этой проблемой и решил, что пришло время протянуть руку. Заранее спасибо!