#xamarin #xamarin.forms #popup
#xamarin #xamarin.forms #всплывающее окно
Вопрос:
Я установил пакет Nuget Rg.plugins.popup. Попытался установить всплывающую страницу, которая должна отображаться справа. Пробовал разные способы, но не смог найти решение
<pages:PopupPage.Animation>
<animations:MoveAnimation
PositionIn="Right"
PositionOut="Right"
DurationIn="300"
DurationOut="300"
EasingIn="SinOut"
EasingOut="SinIn"
HasBackgroundAnimation="True"/>
</pages:PopupPage.Animation>
Любое решение с помощью плагина RG?
Комментарии:
1. Может быть,
Rg.plugins.popup
это можно сделать. Следует отметить, что формат написания вопроса требует внимания, и вы можете поделиться изображением желаемого эффекта, что будет полезно.
Ответ №1:
Речь идет не об анимации, которая будет управлять только внешним видом. Вы должны убедиться, что содержимое всплывающей страницы правильно упорядочено. Например, вот XAML для всплывающей страницы, которая будет отображать квадратное всплывающее окно в правом верхнем углу.
<?xml version="1.0" encoding="UTF-8"?>
<pages:PopupPage
xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:pages="clr-namespace:Rg.Plugins.Popup.Pages;assembly=Rg.Plugins.Popup"
xmlns:animations="clr-namespace:Rg.Plugins.Popup.Animations;assembly=Rg.Plugins.Popup"
x:Class="MyApp.Views.RandomPopupPage">
<StackLayout
BackgroundColor="White"
HorizontalOptions="End"
VerticalOptions="Start"
Margin="20"
WidthRequest="100"
HeightRequest="100"
Spacing="0">
<Label
VerticalTextAlignment="Center"
HorizontalTextAlignment="Center"
VerticalOptions="Center"
HorizontalOptions="Center"
Text="Some text here" />
</StackLayout>
</pages:PopupPage>
Он имеет StackLayout, выровненный по вертикали с началом (ВВЕРХУ) и выровненный по горизонтали с концом (справа). Он также имеет фиксированную ширину и высоту. Вы должны расположить ее элементы так, как вы делаете с обычной страницей, имея в виду, что она имеет прозрачный фон.
Это выглядит так: см. Изображение
Ответ №2:
Попытался установить всплывающую страницу, которая должна отображаться справа.
Из документа Rg.plugins.popup можно настроить анимацию следующим образом:
Создайте класс UserAnimation
class UserAnimation : MoveAnimation
{
private double _defaultTranslationY;
public UserAnimation()
{
DurationIn = DurationOut = 300;
EasingIn = Easing.SinOut;
EasingOut = Easing.SinIn;
PositionIn = MoveAnimationOptions.Right;
PositionOut = MoveAnimationOptions.Right;
}
//1
public override void Preparing(View content, PopupPage page)
{
base.Preparing(content, page);
page.IsVisible = false;
if (content == null) return;
_defaultTranslationY = content.TranslationY;
}
//3
public override void Disposing(View content, PopupPage page)
{
base.Disposing(content, page);
page.IsVisible = true;
if (content == null) return;
content.TranslationY = _defaultTranslationY;
}
//2
public async override Task Appearing(View content, PopupPage page)
{
var taskList = new List<Task>();
taskList.Add(base.Appearing(content, page));
if (content != null)
{
var topOffset = GetTopOffset(content, page);
var leftOffset = GetLeftOffset(content, page);
taskList.Add(content.TranslateTo(content.Width, _defaultTranslationY, DurationIn, EasingIn));
};
page.IsVisible = true;
await Task.WhenAll(taskList);
}
//4
public async override Task Disappearing(View content, PopupPage page)
{
var taskList = new List<Task>();
taskList.Add(base.Disappearing(content, page));
if (content != null)
{
_defaultTranslationY = content.TranslationX - content.Width;
var topOffset = GetTopOffset(content, page);
var leftOffset = GetLeftOffset(content, page);
taskList.Add(content.TranslateTo(leftOffset, _defaultTranslationY, DurationOut, EasingOut));
};
await Task.WhenAll(taskList);
}
}
Используйте его в Xaml:
<pages:PopupPage.Animation>
<animations:UserAnimation/>
</pages:PopupPage.Animation>
Не уверен, что приведенный ниже эффект — это то, что вы хотите, но вы можете использовать этот метод для настройки анимации.