Предполагая, что радиус вашей границы уже установлен на 50% от высоты и ширины после его уменьшения, все, что вам нужно сделать, анимировать ширину кнопки.
XAML
<StackLayout>
<Button
x:Name="Button1"
BorderRadius="20"
Clicked="Button1_Clicked"
HeightRequest="40"
HorizontalOptions="CenterAndExpand"
VerticalOptions="CenterAndExpand"
WidthRequest="150" />
</StackLayout>
Код позади
private void Button1_Clicked(object sender, EventArgs e)
{
var changeWidthAnimation = Button1.Width == 150
? new Animation(b => Button1.WidthRequest = b, 150, 40)
: new Animation(b => Button1.WidthRequest = b, 40, 150);
changeWidthAnimation.Commit(this, nameof(changeWidthAnimation), 16, 150, Easing.Linear);
}
Пояснение
Этот метод запускается при каждом нажатии кнопки. Он определяет анимацию на основе текущей ширины кнопки. Если текущая ширина кнопки равна 150, настройте анимацию для изменения ширины с 150 на 40. В противном случае установите анимацию go с 40 на 150. Затем запустите анимацию в течение 150 миллисекунд. Поскольку радиус вашей границы уже составляет 20 (50% от 40), вы заканчиваете с хорошей круглой кнопкой.