#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 не существует