Xamarin 具有旋转木马效果的背景图像

Xamarin 具有旋转木马效果的背景图像,xamarin,xamarin.forms,Xamarin,Xamarin.forms,我想创建一个带有全屏背景图像和一些UI元素的布局。关键在于: 我希望背景图像像旋转木马一样旋转,但我希望UI元素保持不变。也就是说,如果我滑动屏幕,背景图像应该滑到一边,一个新的图像应该取代它。我知道CarouselPage,但在我看来,它不会起作用,因为页面只能有一个子元素,它在滑动时会替换它,这意味着UI元素将是CarouselPage的后代,因此也会被设置动画 我猜我需要一些自定义的渲染器,但是我应该如何设计它呢?是否应该将一个全屏图像控件替换为另一个具有UI元素的全屏图像控件?我该怎么做

我想创建一个带有全屏背景图像和一些UI元素的布局。关键在于:

我希望背景图像像旋转木马一样旋转,但我希望UI元素保持不变。也就是说,如果我滑动屏幕,背景图像应该滑到一边,一个新的图像应该取代它。我知道
CarouselPage
,但在我看来,它不会起作用,因为
页面
只能有一个子元素,它在滑动时会替换它,这意味着UI元素将是
CarouselPage
的后代,因此也会被设置动画

我猜我需要一些自定义的渲染器,但是我应该如何设计它呢?是否应该将一个全屏图像控件替换为另一个具有UI元素的全屏图像控件?我该怎么做?还是有更好的方法

我正在使用Xamarin.Forms为iOS和Android开发

提前感谢。

我不太喜欢,而且我认为多层可操作项可能会导致混乱,但这些问题吸引着我,我可以看到这种用户界面的利基,因此我对你的问题有以下看法

让我们假设这是(
Xamarin.Forms.
页面
要使用自定义旋转木马背景进行渲染:

public类FunkyPage:ContentPage
{
公共IList映像路径{get;set;}
公共FunkyPage()
{
内容=新的堆栈布局{
垂直选项=布局选项。中心,
水平选项=布局选项。中心,
间距=12,
儿童={
新标签{Text=“Foo”},
新标签{Text=“Bar”},
新标签{Text=“Baz”},
新标签{Text=“Qux”},
}
};
ImagePath=新列表{“red.png”、“green.png”、“blue.png”、“orange.png”};
}
}
iOS的渲染器可能如下所示:

[程序集:导出渲染器(typeof(FunkyPage),typeof(FunkyPageRenderer))]
公共类FunkyPageRenderer:PageRenderer
{
UIScrollView bgCarousel=新的UIScrollView(矩形F.Empty){
PaginEnabled=真,
ScrollEnabled=true
};
List uiimages=新列表();
受保护的覆盖无效OnElementChanged(VisualElementChangedEventArgs e)
{
foreach(uiimages中的var sub)
sub.RemoveFromSuperview();
uiimages.Clear();
if(例如NewElement!=null){
var page=e.NewElement作为FunkyPage;
foreach(page.imagepath中的var图像){
var uiimage=newuiimageview(newuiimage(image));
bgparousel.Add(uiimage);
添加(uiimage);
}
}
碱基。一个元素改变(e);
}
公共覆盖无效ViewDidLoad()
{
添加(旋转木马);
base.ViewDidLoad();
}
公共覆盖无效视图WillLayoutSubViews()
{
base.ViewWillLayoutSubviews();
bgparousel.Frame=视图.Frame;
var原点=0f;
foreach(uiimages中的var图像){
image.Frame=新矩形F(原点,0,View.Frame.Width,View.Frame.Height);
原点+=View.Frame.Width;
}
bgCarousel.ContentSize=新的SizeF(原点、视图、帧、高度);
}
}
这是经过测试和工作。在此基础上添加UIPageControl(点)很容易。自动滚动背景也很简单


Android上的过程类似,覆盖有点不同。

听起来很酷。让我们知道你是如何处理的。:)用户是否能够与UI元素进行交互?或者它们纯粹是为了显示信息?它们将是交互式的。基本上是几个og按钮和标签。这看起来很有希望,Stephane。不过,我不确定自己是否完全理解。我知道您正在这里创建一个自定义页面,并使用ImagePath中的图像集合填充一组UIScrollView,并且这些UIScrollView中的每一个都代表一个背景。我不明白的是你为什么要制作e.NewElement!=空检查?我也不太理解ViewWillLayoutSubviews中的代码,只是它与大小有关。也。你是怎么测试的?如何触发“刷卡效应”(即用一个图像替换另一个图像)?在模拟器和设备上测试