• Windows Phone 7 学习流程攻略(二)


    今天介绍,本教程的第二章。

    第二章 手机方向

    一,Silverlight和自动布局

    在xaml中可以通过,SupportedOrientations来设置程序中支持的手机方向。

    在切换手机方向后,Silverlight会自动根据xaml中的设置重新布局,所以在设计时要考虑屏幕方向改变后程序的切换效果。

    书中利用TextBlock中的VerticalAlignment和HorizontalAlignment进行了布局演示。

    --------------------

    Tips:

    1. VerticalAlignment可设置为Top,Center,Bottom。

        HorizontalAlignment可设置为Left,Center,Right。

    2. Margin属性的类型是Thickness。在xaml中Thickness可以有一个参数(四个方向全都是这个数值),两个参数(左右方向为第一个参数,上下方向为第二个参数),四个参数(不用说了,代表左上右下)

    3. 可以在控件添加SizeChanged属性事件,于cs文件中实现该控件大小改变时需要做的工作。

    4. 在xaml中以命名的标签可以,在cs中调用。命名方式有两种x:Name和Name,书中解释属性x:Name是xmal文件标签的命名方式,而属性Name是继承FrameworkElement的,因此不是所有标签都可以用Name命名。(后面会看见各种TransForm都不是继承FrameworkElement的,因此只能用x:Name命名)

    5. 可以在xaml中修改属性shell:SystemTray.IsVisible来显示或隐藏任务栏。如果用户不需要知道事件,而你需要32个像素的空间时,大可以隐去任务栏。

    -----------------------

    二,方向改变事件

    Silverlight中,可以在cs文件中重载PhoneApplicationPage的OnOrientationChanged函数来截获屏幕方向发生变化的事件。(当然是在SupportedOrientations允许屏幕方向改变的前提下)参数中的Orientation属性是新的屏幕方向。

    三,XNA中的方向设置

    XNA中默认的是Landscape方向,不过在Game1()构造函数构造了graphics之后,可以通过设置他的SupportedOrientations属性来声明允许的屏幕方向。

    ---------------------

    Tips:

    1. 设置许可方向的方法在Game1(),构造graphics对象后调用

    graphics.SupportedOrientations = DisplayOrientation.Portrait |
                                                  DisplayOrientation.LandscapeLeft |
                                                  DisplayOrientation.LandscapeRight;

    2. 在屏幕方向是Portrait的时候屏幕的默认大小是240*240,这时可以设置graphics的PreferedBackBufferWidth和PreferedBackBufferHeight来调整屏幕缓冲大小。

    3. graphics.IsFullScreen可以用来设置是否全屏。

    4. 由于XNA中没有提供屏幕方向改变时响应的事件,因此只能在Update函数中实时刷this.GraphicsDevice.Viewport来计算此时屏幕大小,改变XNA内容,刷新画图。

    5. 还可以通过this.Window.ClientBounds得到工作区域的矩形。

    --------------------

    四,一个简单的时钟实现

    这段介绍了如何分别用Silverlight和XNA来实现一个时钟。

    Silverlight比较简单利用System.Windows.Threading的DispatcherTimer建立一个对象。设置步长DispatcherTimer.Interval,添加DispatcherTimer.Tick事件的回调委托,DispatcherTimer.Start开始。

    然后按事件回调一刷界面就可以了。

    这里着重介绍了Silverlight的刷新方法,不是全屏刷,而是只刷改变的控件。

    XNA通过对在Update函数中对时间差的对比来判断是否超过一秒钟,如果超过一秒就刷新文字内容,否则调用SuppressDraw();来取消这次执行完Update后,需要执行的Draw函数。

    -------------------

    Tips:

    1. 还是由于垃圾回收影响效率的问题,需要在Update中做字符操作的时候,在声明字符串的时候用StringBuilder类代替String类型。

    2. 在Update函数中调用SuppressDraw函数可以取消这次Update后应该执行的Draw函数。这是一个可以减少耗电的好把戏。

    -------------------

    下一章介绍触摸。

  • 相关阅读:
    保留最大的数
    彩色宝石项链
    [leetcode] 403. Frog Jump
    [leetcode] 402. Remove K Digits
    Linux 更改时区、时间
    Linux系统时间同步方法
    mysql 5.7.28 地理位置计算详解
    springboot微服务项目集成为单体
    地理空间数据Geometry在MySQL中使用(一)
    mysql中geometry类型的简单使用
  • 原文地址:https://www.cnblogs.com/biosli/p/1984359.html
Copyright © 2020-2023  润新知