Come si fa a levigare un'immagine usata come skin di controllo?
-
06-07-2019 - |
Domanda
Sto incorporando un'immagine come questa:
[Embed(source="/tool_deleteUp.png")]
private static const c_deleteButton_styleUp:Class;
Lo sto usando in questo modo:
_removeButton = new Button();
_removeButton.setStyle('upSkin', c_deleteButton_styleUp);
Quando ruoto il pulsante, l'immagine non si ridimensiona uniformemente. Conosco i trucchi che uno usa per ridimensionare un'immagine caricata in un controllo Immagine, ma sto sbattendo la testa contro un muro cercando di capire come farlo qui.
Aiuto!
Soluzione 2
Una soluzione migliore e più generale. Non solo gestisce il caso precedente, ma lo fa
- Senza sottoclassi
- Funziona con qualsiasi componente UIC, incluso IRawChildContainers (come Container), che nasconde i bambini skin in rawChildren
- Regola solo gli elementi aggiunti di recente, anziché eseguirli ogni volta che il controllo si aggiorna.
public static function smoothChildBitmaps(object:UIComponent):void{
// Define a nested smooth method
function smoothChildren(val:UIComponent):void{
var childList:IChildList;
if(val is IRawChildrenContainer){
childList = (val as IRawChildrenContainer).rawChildren;
}
else{
childList = object;
}
for(var i:int = 0; i < childList.numChildren; i++){
var child:Bitmap = childList.getChildAt(i) as Bitmap;
if(child != null){
child.smoothing = true;
}
}
};
// Call the nested method on the object right away
smoothChildren(object);
// Set up an event handler to re-call the method when a child is added
object.addEventListener(
Event.ADDED,
function(args:Event):void{
smoothChildren(object);
}
);
}
Altri suggerimenti
un modo bizzarro sarebbe quello di attraversare i figli / nipoti del pulsante, per trovare il Bitmap
corrispondente che è di tipo c_deleteButton_styleUp
e impostarlo su true. .. è un grande difetto di flessibilità, che a volte richiede lezioni per lo styling anche se alcuni IDisplayObjectFactory
sarebbero completamente sufficienti a tale scopo e renderebbero la tua vita molto più facile ... ma la vita è vita .. .
non conosco un modo semplice di flettere ... l'unica possibilità che mi viene in mente è quella di creare un file SWF, che contenga la risorsa come simbolo, con il livellamento attivato e incorporare questo simbolo da quel file SWF ...
spero che aiuti ...
greetz
back2dos
Stupido, ma funziona.
import flash.display.Bitmap;
import mx.controls.Button;
public class SmoothButton extends Button{
protected override function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void{
for(var i:int = 0; i < this.numChildren; i++){
var child:Bitmap = this.getChildAt(i) as Bitmap;
if(child != null){
child.smoothing = true;
}
}
}
}
Non so cosa abbiate sbattuto la testa su senza offesa, solo scherzando . Avevo una scrivania :-P
Comunque, quegli script presentati sono totalmente inutili! Per prima cosa non puoi lanciare un uicomponent in bitmap! L'altra cosa è che la sceneggiatura dei secondi con rawchildren è più o meno la stessa. rawchildren prende i tuoi bambini e il cromo del contenitore - tutto qui. Se hai un pulsante in un contenitore, puoi provare a smussare il cromo del contenitore - il resto rimane lo stesso poiché tutti i cast su bitmap falliranno.
Quindi, qualcuno ha rdfm?
D'altra parte. Si potrebbe provare stage.quality a stagequality.best. Se controlli i forum di Adobe http://forums.adobe.com/thread/427899 tu vedrà che il flex funziona bene - solo il tipo di aria ignora questo :-(
Se quei due script funzionassero mai - esp. la parte con pulsante come bitmap - andrò a sbattere la testa da qualche parte :-). Non vedo NESSUN MODO nella gerarchia di classi che questo potrebbe funzionare. Dopotutto, numChildren ti dà solo uicomponents o displayobjects ma niente di più!