Экран-заставка Xamarin поддерживает только одно изображение

#android #ios #xamarin #splash-screen

#Android #iOS #xamarin #экран-заставка

Вопрос:

Действительно ли невозможно иметь вращающийся экран-заставку для Android и Ios?

Для Ios у меня есть документ типа

 type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB"
  

который работает нормально, но, похоже, нет способа повернуть его со случайными изображениями.

Для Android у меня есть следующее в верхней части класса SplashActivity

 [Activity(MainLauncher = true, NoHistory = true, Theme = "@style/Theme.Splash",
    ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation, ScreenOrientation=ScreenOrientation.Portrait)]
  

Чего я действительно пытаюсь добиться, так это иметь экран-заставку, который представляет собой поворот примерно из 6 изображений. Поэтому, когда пользователь впервые открывает приложение, он увидит первое изображение и так далее.

Я не могу себе представить, что люди не хотели, чтобы заставка была динамической. Например, возможно, на Хэллоуин приложение будет отображать тыкву на заставке и т. Д.

Я просто что-то здесь упускаю?

Комментарии:

1. «Динамические экраны запуска» соответствуют «Рекомендациям Apple по интерфейсу пользователя», включая раскадровки запуска «… не должен выполнять какие-либо вычисления или иметь какой-либо вспомогательный код … » Это сделано для того, чтобы как можно быстрее запустить ваше приложение и привести его в состояние выполнения поставленной задачи, Apple называет это » запуском с преуменьшением » в своих рекомендациях по пользовательскому интерфейсу (если вы хотите ознакомиться с их точкой зрения по этому вопросу).). Конечно, вы можете вставить свою собственную раскадровку, которая отображает вращающееся изображение из выделения, которое отображается после экрана запуска вашего приложения, а затем вы перейдете к основному интерфейсу вашего приложения.

2. @SushiHangover Да, это то, что я подумал, но просто хотел получить некоторые разъяснения. Спасибо за разъяснение.

Ответ №1:

В Android вы можете создавать анимацию для заставки. Я использую переход для справки. Вы можете создать XML-файл в соответствии с тем, что вы хотите.

Создайте Anim папку и поместите hyperspace_jump.xml файл в нем.

 <set xmlns:android="http://schemas.android.com/apk/res/android"
android:shareInterpolator="false">
<scale
    android:interpolator="@android:anim/accelerate_decelerate_interpolator"
    android:fromXScale="1.0"
    android:toXScale="1.4"
    android:fromYScale="1.0"
    android:toYScale="0.6"
    android:pivotX="50%"
    android:pivotY="50%"
    android:fillAfter="false"
    android:duration="700" />
<set
    android:interpolator="@android:anim/accelerate_interpolator"
    android:startOffset="700">
    <scale
        android:fromXScale="1.4"
        android:toXScale="0.0"
        android:fromYScale="0.6"
        android:toYScale="0.0"
        android:pivotX="50%"
        android:pivotY="50%"
        android:duration="400" />
    <rotate
        android:fromDegrees="0"
        android:toDegrees="-45"
        android:toYScale="0.0"
        android:pivotX="50%"
        android:pivotY="50%"
        android:duration="400" />
</set>
  

Создайте макеты:

Макет заставки:

  <RelativeLayout xmlns:p1="http://schemas.android.com/apk/res/android"
   p1:minWidth="25px"
   p1:minHeight="25px"
   p1:layout_width="match_parent"
   p1:layout_height="match_parent"
   p1:background="@android:color/white"
   p1:id="@ id/relativeLayout1">

   <ImageView
       p1:layout_width="wrap_content"
       p1:layout_height="wrap_content"
       p1:id="@ id/imageView"
       p1:layout_centerVertical="true"
       p1:layout_centerHorizontal="true"
       p1:src="@drawable/a01" />
   </RelativeLayout> 
  

Основное описание:

 <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:minWidth="25px"
android:minHeight="25px">
<TextView
android:text="Main Activity Started"
android:textAppearance="?android:attr/textAppearanceLarge"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@ id/textView1"/>
</LinearLayout>
  

Код, лежащий в основе:

SplashScreenActivity:

 public class SplashScreenActivity : Activity
{
ImageView imageView;
Animation view_animation;
TextView textview;
protected override void OnCreate(Bundle bundle)
{
    base.OnCreate(bundle);
    RequestWindowFeature(Android.Views.WindowFeatures.NoTitle);
    SetContentView (Resource.Layout.SplashScreen);
    imageView = (ImageView)FindViewById(Resource.Id.imageView);
    
    view_animation = AnimationUtils.LoadAnimation(this,Resource.Animation.hyperspace_jump);
     
    imageView.StartAnimation(view_animation);
    view_animation.AnimationEnd  = Rotate_AnimationEnd;
    
}

private void Rotate_AnimationEnd(object sender, Animation.AnimationEndEventArgs e)
{
    Finish();
    StartActivity(typeof(MainActivity));
}
}
  

MainActivity:

  protected override void OnCreate(Bundle savedInstanceState)
{
    base.OnCreate(savedInstanceState);
    SetContentView(Resource.Layout.Main);
    Toast.MakeText(this, "Welcome to MainActivity", ToastLength.Long).Show();
}
  

Скриншот:

введите описание изображения здесь

Вы можете скачать с GitHub для справки. https://github.com/WendyZang/Test/tree/master/SplashScreenDemo

Обновлено:

Создайте новое действие, чтобы определить день недели.

Activity1.cs: удалите MainLauncher = true из SplashScreenActivity .

  [Activity(Label = "SplashScreenDemo", MainLauncher = true)]
public class Activity1 : Activity
{
    protected override void OnCreate(Bundle savedInstanceState)
    {
        base.OnCreate(savedInstanceState);

        // Create your application here
        var dateTime = DateTime.Today;
        if (dateTime.DayOfWeek== DayOfWeek.Thursday)
        {
            StartActivity(typeof(ThursdayActivity));
        }
        else if (dateTime.DayOfWeek == DayOfWeek.Monday)
        {
            StartActivity(typeof(SplashScreenActivity));
        }
    }
}
  

Создайте новый макет заставки ThursdayLayout с другим изображением в ImageView и создайте новое действие для этого имени ThursdayActivity .

После этого вы можете запустить ThursdayActivity с заставкой Thursday, когда наступит четверг.

Комментарии:

1. Спасибо за отличный ответ, но под вращением я подразумевал, что, например, в понедельник отображается экран-заставка в понедельник, и то же самое для вторника и т. Д.

2. Что это example on Monday the Monday splash screen shows and same for Tuesday etc значит?

3. Это означает, что если вы откроете приложение в понедельник, вы увидите другую заставку, чем если бы вы открыли его во вторник. Также отличается в среду. Другими словами, код будет, если date.today==понедельник показать mondaysplash и т. Д

4. Я бы продолжил поиск и обратную связь как можно скорее.

5. Да, это именно то, что я ищу, за исключением того, что проблема в том, что это работает только для Android. Похоже, решения для IOS не существует