设为首页 收藏本站
查看: 1283|回复: 0

【Win8】--动画&异步编程

[复制链接]

尚未签到

发表于 2015-5-21 09:13:57 | 显示全部楼层 |阅读模式
  一、动画(Animation)
1、StoryBoard基础
   在MainPage.xaml页面:
(1)添加一个Button,然后设置使得Button在X轴上“自行展开--缩放”。
    设置Button:








  添加资源:



  
           //Storyboard与其他资源控件特殊的是:x:Name,只有StoryBoard可以设置为x:Name,而其他的则设置为x:Key



  在Click事件中添加: sb1.Begin();
      ok,运行,点击Button时,会看到Button沿着 X轴 从“0”到“3”自行展开缩放。
(2)在上述条件下,再进行设置使得Button同时在X轴上“自行展开--缩放”和在Y轴上“360度旋转”。
    在Button里再添加:






  在资源中再添加:






  在Click事件中再添加: sb2.Begin();
       ok,运行,点击Button时,会看到Button在X轴和Y轴上同时变化。(如果分开播放,则多一个Completed事件即可。)
(3)Storyboard的其他属性:
       在资源中添加 Duration="00:00:05",指的是在5秒中完成动画(指动画在From\To之间变化时的持续时长);AutoReveverce="True",自动反向运行;RepeatBehavior="Forever",永远重复播放模式,(注意在不需要的时候尽快停止,否则可能会导致计算机无法进入省电模式),="5x"表示重复5次;
      除了DoubleAnimation外,还有很多其他动画,均从TimeLine类继承,均有的属性AutoReverse、RepeatBehavior、Duration、BeginTime(延迟播放)和Completed事件(播放完成)等。
    指定EasingFunction属性可以设定动画的欢动曲线,BounceEase什么的,详情去搜索 “Silverlight的Easing”
2、转换(Transition)
(1)在StackPanel中动态的添加本地时间
   在MainPage.xaml中设计:






    //这里是重点,在添加的时候增加的效果,可以变换很多种的效果,自己试吧




  在Click事件中添加:



Button btn = new Button();
btn.Content = DateTime.Now;
sp1.Children.Add(btn);
  (2)改变StackPanel本身的变化效果:



  




     ok,运行下,添加本地时间的时候,可以观看它的效果,比原本直接添加的效果要好很多的。
  二、异步编程
  异步编程可以避免界面很卡的问题,但会导致编写“等待一个异步操作执行完成再执行一段代码”的程序。在方法中如果有一个地方用到了await,则方法需要标注为asyn。一般异步方法都是以Async结尾,一步方法都可以使用await编程(好像是同步的,其实不是),异步执行结束后才继续详细执行,返回值中有执行结果。
在win8系统里面很多API都封装成了异步的形式,就是说微软把可能浪费时间的全部都只提供一个异步,其实异步用着和同步感觉没什么太大的差别。win8的异步编程大量的使用了Lambda表达式(详细情况查询MSDN吧)。
    需要调用异步,Windows运行时API的常见任务为:
          @显示消息对话框(MessageDialog)
          @使用文件系统(IO操作)
          @向Internet发送数据和从Internet接受数据(HttpClient)
当然编程语言不通,支持异步的模式也不同:
         JS的异步表示形式:承诺对象,then函数
         C#的异步表示形式:将来对象,await运算符
         Basic的异步表示形式:将来对象,Await运算符
         C++的异步表示形式:task类,then方法
C#中的await:
   用awit编译器把后面的代码自动创建一个委托然后把后面的代码放到Completed里面,然后好像是同步,并把返回的结果放到result执行后的结果里,这样写起来类似同步其实是异步调用

  1、显示消息对话框(MessageDialog)
     在前面的博客中已经写过了,请参考 http://www.iyunv.com/kefira/archive/2013/03/07/windows8.html 中的12、消息框(MessageDialog)
  2、使用文件系统(IO操作)
   Package.Current.InstalledLocation来获得程序的安装文件夹,GetFolderAsync、GetFilesAsync遍历文件夹。
   例子:读取Image文件夹下的所有图片到FlipView中。
  (1)在MainPage.xaml中设置:













  (2)后台代码实现:
  StorageFolder的命名空间:using Windows.Storage; Package的命名空间:using Windows.ApplicationModel;



  StorageFolder installFolder = Package.Current.InstalledLocation; //获得程序的安装路径
var imgFolder= await installFolder.GetFolderAsync("Images"); //别忘了加await
var files = await imgFolder.GetFilesAsync();
List myList = new List();
foreach (var file in files)
{
string path="ms-appx:///Images/"+ file.Name;
myList.Add(path);
}
fvImage.ItemsSource = myList;
  运行结果(点击Button时将图片添加到FlipView中)如图: DSC0000.png    (附加一句:我超喜欢柯南的呢)
  3、向Internet发送数据和从Internet接受数据(HttpClient)
  例子:获取百度首页的源码
     HttpClient 所属命名空间:using System.Net.Http;   MessageDialog 所属命名空间:using Windows.UI.Popups;



HttpClient httpClient = new HttpClient();
var result = await httpClient.GetStringAsync("http://www.baidu.com/index.php?tn=85014098_adr&ch=33");
new MessageDialog(result).ShowAsync();
  运行结果就是在页面上显示出了百度首页的源码
分析:假如使用的是同步方法,UI会卡住一直等到网络请求完成之后才会释放掉UI的线程。
  -- 后记:这节是win8中的动画和异步编程的简单学习(当然需要深入的学习),依旧来自于传智播客视频的学习,分享给同样爱好win8的朋友们!@_@

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-69043-1-1.html 上篇帖子: win8 app 图片操作(显示缩略图) 下篇帖子: 手把手玩转win8开发系列课程(20)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表