none
Splash Screen étendu RRS feed

  • Question

  • Bonsoir à tous,

    Je désire créer un Splash Screen étendu avec une ProgressBar.
    Pour cela, j'ai créer une classe SplashScreen qui contient l'image et la progressBar, je l'affiche dans la méthode Activate de la classe App.

    Mon problème c'est que, sur pc en mode simulateur aucun problème c'est fluide, mais sur tablette il y a une petite seconde ou la page devient noir.
    Sur le Store par exemple je n'ai pas ce problème la.

    Quelqu'un a-t-il une piste ?

    Merci d'avance :)
    mardi 22 octobre 2013 17:54

Réponses

Toutes les réponses

  • Bonjour

    Je dirais que c'est un problème de vitesse.
    Quel type d’image utilisez-vous? La taille de l'image est bonne?
    Voir ici les recommandations pour l'utilisation des Splash Screen:
    http://msdn.microsoft.com/fr-fr/library/windows/apps/hh465338.aspx

    Cordialement,


    Aurel BERA, MSFT
    MSDN Community Support. LE CONTENU EST FOURNI "TEL QUEL" SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE.
    S'il vous plaît n'oubliez pas de "Marquer comme réponse" les réponses qui ont résolu votre problème. C'est une voie commune pour reconnaître ceux qui vous ont aidé, et rend plus facile pour les autres visiteurs de trouver plus tard la résolution.

    jeudi 24 octobre 2013 06:48
  • Bonjour,

    J'utilise une image .png à la bonne taille (620*300) elle pèse 35,9Ko.

    J'ai suivi l'exemple de Microsoft avec les améliorations cité dans la page Recommandation.

    Voici un morceau de code utilisé : 

    Class App :

    protected async override void OnLaunched(LaunchActivatedEventArgs args)        {            if (args.PreviousExecutionState != ApplicationExecutionState.Running)            {                bool loadState = (args.PreviousExecutionState == ApplicationExecutionState.Terminated);                MainPage extendedSplash = new MainPage(args.SplashScreen, loadState);                Window.Current.Content = extendedSplash;            }            Window.Current.Activate();          // Chargement des informations             var rootFrame = new Frame();            if (!rootFrame.Navigate(typeof(Views.Planning)))            {                throw new Exception("Failed to create initial page");            }            Window.Current.Content = rootFrame;        }

    Class MainPage(ExtendedSplashScreen) : 

    private void OnShowWindowTimer(object sender, object e)        {            showWindowTimer.Stop();            // Activate/show the window, now that the splash image has rendered            Window.Current.Activate();        }        private void extendedSplashImage_ImageOpened(object sender, RoutedEventArgs e)        {            // ImageOpened means the file has been read, but the image hasn't been painted yet.            // Start a short timer to give the image a chance to render, before showing the window            // and starting the animation.            showWindowTimer = new DispatcherTimer();            showWindowTimer.Interval = TimeSpan.FromMilliseconds(10);            showWindowTimer.Tick += OnShowWindowTimer;            showWindowTimer.Start();        }        public MainPage(SplashScreen splashscreen, bool loadState)        {            InitializeComponent();            LearnMoreButton.Click += new RoutedEventHandler(LearnMoreButton_Click);            // Listen for window resize events to reposition the extended splash screen image accordingly.            // This is important to ensure that the extended splash screen is formatted properly in response to snapping, unsnapping, rotation, etc...            Window.Current.SizeChanged += new WindowSizeChangedEventHandler(ExtendedSplash_OnResize);            splash = splashscreen;            if (splash != null)            {                // Register an event handler to be executed when the splash screen has been dismissed.                splash.Dismissed += new TypedEventHandler<SplashScreen, Object>(DismissedEventHandler);                // Retrieve the window coordinates of the splash screen image.                splashImageRect = splash.ImageLocation;                PositionImage();            }            // Create a Frame to act as the navigation context            rootFrame = new Frame();            // Restore the saved session state if necessary            RestoreStateAsync(loadState);           // LoadingPlanning();        }        async void RestoreStateAsync(bool loadState)        {            try            {                if (loadState)                    await SuspensionManager.RestoreAsync();            }            catch (Exception E)            {            }            // Normally you should start the time consuming task asynchronously here and            // dismiss the extended splash screen in the completed handler of that task            // This sample dismisses extended splash screen  in the handler for "Learn More" button for demonstration        }        // Position the extended splash screen image in the same location as the system splash screen image.        void PositionImage()        {            extendedSplashImage.SetValue(Canvas.LeftProperty, splashImageRect.X);            extendedSplashImage.SetValue(Canvas.TopProperty, splashImageRect.Y);            extendedSplashImage.Height = splashImageRect.Height;            extendedSplashImage.Width = splashImageRect.Width;        }

    jeudi 24 octobre 2013 09:22
  • Voir les détails sur l’activation du SplashScreen dans le même lien :  

    Dans l’exemple, nous avons supprimé l’appel à Activate pour la fenêtre actuelle. Cette activation est plutôt effectuée par l’objet ExtendedSplash une fois que l’événement ImageOpened s’est déclenché pour indiquer que l’image d’écran de démarrage étendu a été lue.

    Est que vous pouvez modifier le code dans votre thread, car maintenant c'est incomprehensible.

    Si vous faites un teste avec le code propose dans le même lien il fonctionne bien ou vous avez le même soucie ?

    Cordialement,


    Aurel BERA, MSFT
    MSDN Community Support. LE CONTENU EST FOURNI "TEL QUEL" SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE.
    S'il vous plaît n'oubliez pas de "Marquer comme réponse" les réponses qui ont résolu votre problème. C'est une voie commune pour reconnaître ceux qui vous ont aidé, et rend plus facile pour les autres visiteurs de trouver plus tard la résolution.

    jeudi 24 octobre 2013 10:28
  • Je n'ai pas fait le test sous Windows 8.1.
    En revanche j'ai pri les 2 classes proposée par Microsoft (App et ExtendedSplash) et j'ai effectivement toujours le problème sur la tablette.
    Sur un ordinateur plus puissant, je n'ai pas le problème (ou rarement).

    Class App : 

    public App()
            {
                this.InitializeComponent();
                this.Suspending += new SuspendingEventHandler(OnSuspending);
            }

            async void OnSuspending(object sender, SuspendingEventArgs args)
            {
                SuspendingDeferral deferral = args.SuspendingOperation.GetDeferral();
                await SuspensionManager.SaveAsync();
                deferral.Complete();
            }

            protected async override void OnLaunched(LaunchActivatedEventArgs args)
            {
                if (args.PreviousExecutionState != ApplicationExecutionState.Running)
                {
                    bool loadState = (args.PreviousExecutionState == ApplicationExecutionState.Terminated);
                    MainPage extendedSplash = new MainPage(args.SplashScreen, loadState);
                    Window.Current.Content = extendedSplash;
                }

                Window.Current.Activate();
            }

    Class MainPage(SplashScreen) :

    private void OnShowWindowTimer(object sender, object e)
            {
                showWindowTimer.Stop();

                // Activate/show the window, now that the splash image has rendered
                Window.Current.Activate();

                LoadingPlanning();
            }

            private void extendedSplashImage_ImageOpened(object sender, RoutedEventArgs e)
            {
                // ImageOpened means the file has been read, but the image hasn't been painted yet.
                // Start a short timer to give the image a chance to render, before showing the window
                // and starting the animation.
                showWindowTimer = new DispatcherTimer();
                showWindowTimer.Interval = TimeSpan.FromMilliseconds(50);
                showWindowTimer.Tick += OnShowWindowTimer;
                showWindowTimer.Start();
            }

            public MainPage(SplashScreen splashscreen, bool loadState)
            {
                InitializeComponent();

                // Listen for window resize events to reposition the extended splash screen image accordingly.
                // This is important to ensure that the extended splash screen is formatted properly in response to snapping, unsnapping, rotation, etc...
                Window.Current.SizeChanged += new WindowSizeChangedEventHandler(ExtendedSplash_OnResize);

                splash = splashscreen;

                if (splash != null)
                {
                    // Register an event handler to be executed when the splash screen has been dismissed.
                    splash.Dismissed += new TypedEventHandler<SplashScreen, Object>(DismissedEventHandler);

                    // Retrieve the window coordinates of the splash screen image.
                    splashImageRect = splash.ImageLocation;
                    PositionImage();
                }

                // Create a Frame to act as the navigation context
                //rootFrame = new Frame();

                // Restore the saved session state if necessary
                RestoreStateAsync(loadState);
            }

            async void RestoreStateAsync(bool loadState)
            {
                try
                {
                    if (loadState)
                        await SuspensionManager.RestoreAsync();
                }
                catch (Exception E)
                {

                }

                // Normally you should start the time consuming task asynchronously here and
                // dismiss the extended splash screen in the completed handler of that task
                // This sample dismisses extended splash screen  in the handler for "Learn More" button for demonstration
            }

            // Position the extended splash screen image in the same location as the system splash screen image.
            void PositionImage()
            {
                extendedSplashImage.SetValue(Canvas.LeftProperty, splashImageRect.X);
                extendedSplashImage.SetValue(Canvas.TopProperty, splashImageRect.Y);
                extendedSplashImage.Height = splashImageRect.Height;
                extendedSplashImage.Width = splashImageRect.Width;
            }

    jeudi 24 octobre 2013 13:16
  • Essayez d’augmenter le temps spécifié ici :
     showWindowTimer.Interval = TimeSpan.FromMilliseconds(50);
    Faites des tests avec  100, 150, 200 ......

    Aussi, essayez d’utiliser une image .BMP. PNG c'est image avec compression, et décomprimer l'image peut prendre du temps. BMP c'est une image sans compression, et peut-être l'affichage sera plus rapide.

    Cordialement,


    Aurel BERA, MSFT
    MSDN Community Support. LE CONTENU EST FOURNI "TEL QUEL" SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE.
    S'il vous plaît n'oubliez pas de "Marquer comme réponse" les réponses qui ont résolu votre problème. C'est une voie commune pour reconnaître ceux qui vous ont aidé, et rend plus facile pour les autres visiteurs de trouver plus tard la résolution.


    jeudi 24 octobre 2013 13:44
  • J'ai augmenté le temps jusqu'à 800ms sans résultat...
    jeudi 24 octobre 2013 13:56
  • Essayez avec une image .BMP.
    J'ai modifié mon poste antérieur sans voir votre réponse. 
     

    Aurel BERA, MSFT
    MSDN Community Support. LE CONTENU EST FOURNI "TEL QUEL" SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE.
    S'il vous plaît n'oubliez pas de "Marquer comme réponse" les réponses qui ont résolu votre problème. C'est une voie commune pour reconnaître ceux qui vous ont aidé, et rend plus facile pour les autres visiteurs de trouver plus tard la résolution.

    jeudi 24 octobre 2013 14:05
  • J'ai modifié l'image en .bmp, sans succès, il à toujours ce léger écran noir.
    A savoir que je n'ai aucun problème pour l'application Store de Microsoft par exemple ...
    jeudi 24 octobre 2013 14:59
  • Voir la réponse marquée ici .


    Aurel BERA, MSFT
    MSDN Community Support. LE CONTENU EST FOURNI "TEL QUEL" SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE.
    S'il vous plaît n'oubliez pas de "Marquer comme réponse" les réponses qui ont résolu votre problème. C'est une voie commune pour reconnaître ceux qui vous ont aidé, et rend plus facile pour les autres visiteurs de trouver plus tard la résolution.


    vendredi 25 octobre 2013 10:03
  • Ou se trouve la réponse ?
    C'est un lien qui renvoi vers le sujet que j'ai posté sur le forum ...
    vendredi 25 octobre 2013 13:53
  • J'ai modifié le lien.



    Aurel BERA, MSFT
    MSDN Community Support. LE CONTENU EST FOURNI "TEL QUEL" SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE.
    S'il vous plaît n'oubliez pas de "Marquer comme réponse" les réponses qui ont résolu votre problème. C'est une voie commune pour reconnaître ceux qui vous ont aidé, et rend plus facile pour les autres visiteurs de trouver plus tard la résolution.


    • Modifié Aurel Bera vendredi 25 octobre 2013 14:00
    vendredi 25 octobre 2013 14:00
  • C'est super, ça fonctionne. Etonnant que Microsoft n'est pas modifié le tutoriel pour éviter le léger freezer. Merci :)
    vendredi 25 octobre 2013 14:28