第二十二章:动画(八)
旋转和锚
AnchorX和AnchorY属性为“缩放”和“旋转”属性设置缩放或旋转的中心,因此它们也会影响ScaleTo和RotateTo动画。
CircleButton程序将一个Button旋转一个圆圈,但不像你之前看到的那样。 该程序围绕屏幕中心旋转按钮,为此它需要AnchorX和AnchorY。
XAML文件将Button放在AbsoluteLayout中:
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"x:Class="CircleButton.CircleButtonPage"><ContentPage.Padding><OnPlatform x:TypeArguments="Thickness"iOS="0, 20, 0, 0" /></ContentPage.Padding><AbsoluteLayout x:Name="absoluteLayout"SizeChanged="OnSizeChanged"><Button x:Name="button"Text="Tap Me!"FontSize="Large"SizeChanged="OnSizeChanged"Clicked="OnButtonClicked" /></AbsoluteLayout>
</ContentPage>
此程序为Button使用AbsoluteLayout的唯一原因是将Button精确放置在屏幕上的特定位置。 XAML文件在AbsoluteLayout和Button上设置相同的SizeChanged处理程序。 该事件处理程序将AbsoluteLayout的中心保存为名为center的Point字段,并保存从该中心到最近边缘的距离作为radius字段:
public partial class CircleButtonPage : ContentPage
{Point center;double radius;public CircleButtonPage(){InitializeComponent();}void OnSizeChanged(object sender, EventArgs args){center = new Point(absoluteLayout.Width / 2, absoluteLayout.Height / 2);radius = Math.Min(absoluteLayout.Width, absoluteLayout.Height) / 2;AbsoluteLayout.SetLayoutBounds(button,new Rectangle(center.X - button.Width / 2, center.Y - radius,AbsoluteLayout.AutoSize,AbsoluteLayout.AutoSize));}__
}
OnSizeChanged处理程序通过将Button定位在页面的水平中心来结束,但其顶边的半径距离超出AbsoluteLayout的中心:
回想一下,AnchorX和AnchorY属性必须设置为相对于Button的宽度和高度的数字。 AnchorX值为0表示Button的左边缘,值为1表示右边缘。 类似地,AnchorY值为0表示Button的顶部,值为1表示底部。
要围绕保存为中心的点旋转此按钮,必须将AnchorX和AnchorY设置为基于中心点的值。 Button的中心位于页面中心的正上方,因此AnchorX的默认值为0.5。 但是,AnchorY需要一个从Button顶部到中心点的值,但是以按钮高度为单位:
public partial class CircleButtonPage : ContentPage
{__async void OnButtonClicked(object sender, EventArgs args){button.Rotation = 0;button.AnchorY = radius / button.Height;await button.RotateTo(360, 1000);}
}
然后按钮围绕页面中心完全旋转360度。 这里正在进行中:
第二十二章:动画(八)相关推荐
- 第二十二章:洗净皮衣
第二十二章:洗净皮衣 一种心态,希望找到,另外一种心态,不希望找到,两种心态相互的交织着,让李二陛下的内心相当的痛苦. "你又在这里胡思乱想呢."这个时候长孙皇后走了过来,对着李二 ...
- 【信息系统项目管理师】第二十二章 信息系统安全管理(考点汇总篇)
[信息系统项目管理师]第二十二章 信息系统安全管理(考点汇总篇) 考点分析与预测 信息安全为高级科目独有的章节,在第三版教材中有66页的内容.需要掌握的知识点非常多,且知识点非常散,在考试中上午一般考 ...
- 第二十二章 管理是一种文化活动
第二十二章 管理是一种文化活动 作者:成君忆 第二十二章管理是一种文化活动 古者率民,必先礼信而后爵禄,先廉耻而后刑罚,先亲爱而后律其身.故战者必本乎率身以励众士,如心之使四肢也. ―<尉缭子& ...
- stm32l0的停止模式怎么唤醒_探索者 STM32F407 开发板资料连载第二十二章 待机唤醒实验
1)实验平台:alientek 阿波罗 STM32F767 开发板 2)摘自<STM32F7 开发指南(HAL 库版)>关注官方微信号公众号,获取更多资料:正点原子 第二十二章 待机唤醒实 ...
- stm32 文件系统dma大小_「正点原子NANO STM32F103开发板资料连载」第二十二章 DMA 实验...
1)实验平台:[正点原子] NANO STM32F103 开发板 2)摘自<正点原子STM32 F1 开发指南(NANO 板-HAL 库版)>关注官方微信号公众号,获取更多资料:正点原子 ...
- 数字图像处理:第二十二章 基于模型的编码
第二十二章基于模型的编码 目录 引言 基于对象的编码 基于模型的编码 作业 1. 引言 为了获得更高的压缩效率并保持一定的视频质量以支持超低码率(大约10kbps)双向视频应用,不考虑内容特点的仅仅针 ...
- DayDayUp:《机器崛起前传》第二十二章【蹒跚而来】读后感(文章源自网络)—听课笔记
DayDayUp:<机器崛起前传>第二十二章[蹒跚而来]读后感(文章源自网络)-听课笔记 <机器崛起前传> 1.机器岂不能有自我? 计算机的发展历程可谓蹒跚.从 ...
- 第二十二章 5为你的命名空间取个别名
//第二十二章 5为你的命名空间取个别名 /*#include <iostream> using namespace std; namespace people_compay_boss { ...
- 第二十二章 6未命名的命名空间
//第二十二章 6未命名的命名空间 /*#include <iostream> using namespace std; namespace {int x=2; } namespace { ...
- 20190925 On Java8 第二十二章 枚举
第二十二章 枚举 基本 enum 特性 创建 enum 时,编译器会为你生成一个相关的类,这个类继承自 Java.lang.Enum. valueOf() 是在 Enum 中定义的 static 方法 ...
最新文章
- ORM 一对一 以及csrf 的简单用法
- Android开发小问题集
- 如何确保sublime text每次启动时不会自动打开以前打开的文档
- 跟我学Shiro目录贴
- 知名投资机构董事总经理在培训中晕倒后去世,这个培训究竟是什么?
- 锁定Mac的键盘:连击5次option键
- python基础之python介绍
- 【AlphaGo之后会是什么】一文读懂人工智能打德扑
- linux leach仿真数据传输图性能,基于OMNeT-+-+的Leach协议的仿真研究.pdf
- 最新2016年春运抢票12306买下铺攻略
- BoundsChecker使用说明
- “华为跳槽内幕”:有钱没用,你得值钱
- ONIE——开放网络安装环境
- 如何在Google文档中添加文本框
- 【阅读摘要】第6章 电子元器件与组件的热设计
- 数据分析总结四:可视化与数据分析
- mysql中的left和right
- 为别人着想,是最大的利己
- inet_aton、inet_addr、inet_ntoa、inet_pton、inet_ntop
- 一键设置IP地址(快速设置ip地址)