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张图像。因此,第一次用户打开应用程序时,他们将看到第一张图片,依此类推。

我无法想象人们不希望启动画面是动态的。例如,在万圣节应用中,可能会在飞溅时显示南瓜等。

我只是在这里想念东西吗?

解决方法

在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>

创建布局:

SplashScreen布局:

 <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> 

MainLayout:

<?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();
}

截屏:

enter image description here

您可以从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));
        }
    }
}

使用ImageView中的其他图像创建新的初始屏幕布局ThursdayLayout,并为此命名为ThursdayActivity创建新活动。

此后,您可以在星期四启动带有星期四初始屏幕的ThursdayActivity。