Как оживить текст в xamarin? - PullRequest
0 голосов
/ 03 марта 2020

У меня есть что-то вроде этого в XAML:

<StackLayout>
    <AbsoluteLayout>
        <StackLayout2>
            <Button>
            <Something>
        </StackLayout2>

        <Label animated>
    </AbsoluteLayout>

    <any content ...>
</StackLayout>

Я хочу, чтобы анимация перемещала текст сверху вниз при нажатии кнопки. Во время анимации метка должна находиться за стеком2. Как будто смещается из-под него. Высота AbsoluteLayout должна увеличиться. Любой контент также должен сдвигаться. Как это реализовать?

Меня особенно интересует сдвиг любого контента.

Насколько я понимаю, сама анимация проста в реализации: подождите, пока покажут Text.TranslateTo (0,120, 2000);

1 Ответ

0 голосов
/ 04 марта 2020

Взгляните на это удивительное Видео от Xamarin. Формы, объясняющие, как работают анимации, А вот документация

Но вот что вам нужно do:

1º - добавление события Clicked к кнопке и идентификатора для метки

<Button Clicked="OnButtonClicked" />
<Label x:Name="labelAnimated">

2º - в OnButtonClicked в CodeBehind добавьте анимацию

//Make the method async so you won't block the UI
async void OnButtonClicked(object sender, EventArgs args)
{
    await labelAnimated.TranslateTo (-100, 0, 1000);    // Move image left
    await labelAnimated.TranslateTo (-100, -100, 1000); // Move image up <- you are looking for this one
    await labelAnimated.TranslateTo (100, 100, 2000);   // Move image diagonally down and right
    await labelAnimated.TranslateTo (0, 100, 1000);     // Move image left
    await labelAnimated.TranslateTo (0, 0, 1000);       // Move image up
}

Теперь, чтобы достичь того, что вы искали, я сделал это так:

<Grid>
    <Grid x:Name="ContentThatWillBeShifted">
        //Any type of content you want, Label, Buttons, Images (in the example used images and a label)
    </Grid>
    <Grid>
        //This Content is Overlapping the other content
        <StackLayout BackgroundColor="Blue">
            <Button Clicked="OnButtonClicked">
        </StackLayout>
    </Grid>
</Grid>

async void OnButtonClicked(object sender, EventArgs args)
{
    await ContentThatWillBeShifted.TranslateTo(0, 200, 1000, Easing.BounceOut);
}

Результат:

enter image description here

...