Я создаю мобильное приложение, в котором мне нужно показать календарь с месяцами вверху. Месяцы являются частью компонента, который происходит от SkinnableDataContainer (и имеет некоторую пользовательскую прокрутку / поведение - вот почему я не использовал список искры). Мне нужно, чтобы месяцы отображались в виде вкладки в форме «трапеции», поэтому я использую изображение png в качестве маски в средстве визуализации элементов для компонента.
Когда маска не применяется, все работает хорошо - рендеринг месяцев, выбор списка / контейнера данных работает, когда я нажимаю на месяц и т. Д.
Когда маска применяется, она хорошо отрисовывается, прокрутка и все остальное, кажется, работает хорошо, но когда я нажимаю на месяц, ничего не происходит визуально. И из операторов трассировки в моем коде, кажется, выбор элемента списка не меняется. Похоже, щелчки мыши не работают.
Есть идеи как это исправить?
Я искал похожие звучащие вопросы (но задаю обратное) здесь, на SO. (/1203866/ogranichit-mouseevents-dlya-maskirovki-v-flex-skin)
С уважением,
Кришна
Код:
public class TopCalendarMonthRenderer extends LabelItemRenderer {
[Embed(source="/assets/trapezium_alpha.png")]
private static var TrapeziumMask:Class;
private static var trapeziumMaskInstance:BitmapAsset;
override protected function createChildren():void {
super.createChildren();
setLabelProperties();
createMask();
}
private function createMask():void {
if (!this.maskShape){
if (!trapeziumMaskInstance){
trapeziumMaskInstance = (new TrapeziumMask()) as BitmapAsset;
}
maskShape = new Sprite();
//maskShape.visible = false;
//maskShape.mouseEnabled = false;
maskShape.cacheAsBitmap = true;
this.cacheAsBitmap = true;
this.addChild(maskShape);
//this.hitArea = maskShape;
}
}
override protected function drawBackground(unscaledWidth:Number, unscaledHeight:Number):void {
//don't call the parent's draw: because we draw our own background
var bgColor:uint = 0x555555;
if (this.selected)
bgColor = backgroundColor;
var g:Graphics = this.graphics;
g.beginFill(bgColor);
g.drawRoundRectComplex(0, 0, unscaledWidth, unscaledHeight, 3, 3, 0, 0);
g.endFill();
//TODO: make the mask a hitArea - so the user can interact with it - HOW?
drawMask();
}
private function drawMask():void {
var g:Graphics = maskShape.graphics;
var img:BitmapData = trapeziumMaskInstance.bitmapData;
g.beginBitmapFill(img, null, false, true);
//g.beginGradientFill(GradientType.RADIAL, [0xffffff, 0xff0000], [1, 0], [0, 255]);
//g.beginFill(0xff0000);
g.drawRect(0, 0, img.width, img.height);
g.endFill();
this.mask = maskShape;
//this.hitArea = maskShape;
}
}