Ich bin erstaunt, wie gut die nativen Symbian-Komponenten implementiert sind. Einer von ihnen ist CAKnSlider. CaknSlider ist ein Steuerelement mit einem Schieberegler, mit dem Benutzer es entlang einer Leiste verschieben können, deren Ausrichtung vertikal oder horizontal sein kann.CaknSlider-Steuerelement innerhalb eines CAknView-Containers (nicht als Einstellungselement)
Jetzt, wenn Sie den Schieberegler schieben, ist das Gleiten sehr glatt und flackert nicht. Aber wenn ich aus irgendeinem Grund einen benutzerdefinierten Schieberegler implementieren würde, würde ich es nicht so sauber wie CAKnSlider bekommen.
Also meine Frage ist, wie kann ich herausfinden, wie CaknSlider unter der Haube implementiert ist. Ich möchte einen benutzerdefinierten Schieberegler für meine Radioanwendung implementieren, um die Lautstärke des Audiostreams zu steuern.
Irgendeine Idee, wie ich darüber gehen sollte.
[EDIT: Als Reaktion auf den Kommentar von laalto]
Die CAknSlider Kontrolle oft als setting item in the settings screen umgesetzt wird.
Ich habe es noch nie als Komponente Kontrolle in einem Verbundsteuerungscontainer (wie CCoeControl oder CaknView) implementiert. Dies ist, was ich bisher versucht:
Zuerst habe ich eine Ressource-Datei erstellt mit dem Schieberegler wie unten beschreiben:
RESOURCE SLIDER r_volume_slider
{
layout=EAknCtSlider;
minvalue=0;
maxvalue=10;
step=1;
valuetype=EAknSliderValuePercentage;
minlabel="mute";
maxlabel="full";
}
Dann habe ich die Ressource-Datei in meiner Quelle bin mit dem Schieberegler wie unten zu erstellen:
void CVolumePopupAppView::ConstructL(const TRect& aRect)
{
// Create a window for this application view
CreateWindowL();
InitComponentArrayL();
iSlider = new (ELeave) CAknSlider();
TResourceReader reader;
iEikonEnv->CreateResourceReaderLC(reader, R_VOLUME_SLIDER);
iSlider->ConstructFromResourceL(reader);
CleanupStack::PopAndDestroy ();
iSlider->SetContainerWindowL(*this);
iSlider->SetParent(this);
Components().AppendLC(iSlider);
CleanupStack::Pop (iSlider);
// Set the windows size
SetRect(aRect);
// Activate the window, which makes it ready to be drawn
ActivateL();
}
hier ist der Vergleich zwischen dem CAknSlider als Einstellungspunkt (Screenshot1) und dem CAknSlider, die durch die oben beschriebene Technik (Screenshot2) erstellt wird. Beachten Sie, dass die eine, die ich erstelle, keinen Prozentwert-Indikator und die minimalen und maximalen Textbeschriftungen hat, obwohl ich sie in der Ressource angegeben habe. Das Aussehen und das Gefühl ist auch erbärmlich.
Es würde helfen, wenn Sie beschrieben, was Sie bisher versucht haben - es ist einfacher, Verbesserungsvorschläge zu geben, wenn ein Code oder Pseudo-Code gibt es zu kommentieren. – laalto