#xamarin #animation #login #xamarin.forms #lottie
#xamarin #Анимация #аутентификация #xamarin.forms #лотти
Вопрос:
Я создал страницу входа с помощью XAML в Xamarin Forms, аналогичную той, что изображена на gif. Теперь я хочу анимировать кнопку, как в примере. Я никогда ничего не анимировал в Xamarin Forms, поэтому понятия не имею, как получить подобный переход. Кто-нибудь может мне объяснить, как я могу заставить кнопку сжаться до круга и стать загрузочной анимацией?
Кнопка в настоящее время выглядит следующим образом:
<Button Text="Login" Style="{StaticResource LoginFormButton}" />
<!-- LoginFormButton is defined in App.xaml -->
<Style x:Key="LoginFormButton" TargetType="Button">
<Setter Property="FontSize" Value="18" />
<Setter Property="TextColor" Value="{ StaticResource bgColor }" />
<Setter Property="BorderRadius" Value="25" />
<Setter Property="BackgroundColor" Value="White" />
</Style>
Комментарии:
1. Вы не можете создать такого рода анимацию непосредственно в Xamarin Forms, вам придется сделать это изначально!
2. Проверьте эту ссылку, там есть похожая анимация кнопки, вы можете использовать это. medium.com/@andkulikov /…
Ответ №1:
Я считаю, что это возможно сделать с помощью Xamanimation, я не уверен, что это лучший способ. Другой возможностью является использование анимации, и я бы рекомендовал Lottie.
Если вы собираетесь использовать Xamanimation
xmlns:xamanimation="clr-namespace:Xamanimation;assembly=Xamanimation"
<ContentPage.Resources>
<ResourceDictionary>
<xamanimation:StoryBoard x:Key="Animation1"
Target="{x:Reference Button1}">
<xamanimation:FadeToAnimation Opacity="1" Duration="1500" Easing="Linear"/>
<xamanimation:FadeToAnimation Opacity="0" Duration="1500" Easing="Linear"/>
</xamanimation:StoryBoard>
<xamanimation:StoryBoard x:Key="Animation2"
Target="{x:Reference Button1}">
<xamanimation:FadeToAnimation Opacity="1" Delay="3000" Duration="1500" Easing="Linear"/>
<xamanimation:FadeToAnimation Opacity="0" Duration="1500" Easing="Linear"/>
</xamanimation:StoryBoard>
</ResourceDictionary>
</ContentPage.Resources>
компонент должен быть назван
<Button x:Name="Button1"
Opacity="0"/>
и нужно включить это в исходную часть кода
protected override void OnAppearing()
{
if (Resources["Animation1"] is StoryBoard storyBoardText1)
storyBoardText1.Begin();
if (Resources["Animation2"] is StoryBoard storyBoardText2)
storyBoardText2.Begin();
base.OnAppearing();
}
Или вы можете использовать Lottie
Ответ №2:
Насколько я знаю, вы не можете сделать это в Xamarin Forms с помощью одной кнопки. Для этого потребуется добавить на свою страницу еще пару элементов. Затем вы можете использовать встроенную в Xamarin систему анимации, чтобы адаптировать размеры элемента и активировать / деактивировать их видимые свойства в ходе вашей анимации.
Однако вот как я бы это сделал:
- Вставьте сетку с 1 строкой и 1 столбцом там, где должна быть ваша кнопка
- Поместите кнопку в эту сетку
- Добавьте индикатор активности в сетку
- Добавьте CircleView в сетку (вы должны быть производными от BoxView и использовать пользовательский рендерер, чтобы у него были закругленные углы). Убедитесь, что этот CircleView имеет те же размеры, что и ваш индикатор активности
Теперь установите значение isVisible равным false для индикатора активности и CircleView. После нажатия кнопки входа в систему вы можете присвоить тексту кнопки пустую строку и использовать пользовательскую анимацию (см. https://learn.microsoft.com/de-de/xamarin/xamarin-forms/user-interface/animation/custom ) для анимации уменьшения ширины или левого и правого полей вашей кнопки до тех пор, пока она не сузится настолько, что ее закругленные углы образуют круг и соответствуют размеру индикатора активности.
Вы можете использовать готовый делегат пользовательской анимации, чтобы установить для свойства isVisible для кнопки значение false, а для индикатора активности значение true.
Как только ваша процедура входа в систему (я полагаю, вы отправите какой-то запрос и получите данные из ответа) будет завершена, установите для вашего индикатора активности значение isVisible равным false, для circleview — true, а затем используйте другую пользовательскую анимацию, чтобы анимировать ширину и высоту circleview.
Также убедитесь, что свойству IsClippedToBounds вашей сетки присвоено значение false, поскольку в противном случае круговой вид не сможет расширяться за пределы содержащей его сетки.
Комментарии:
1. Я проверю это. Спасибо за ваш ответ!