博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
windows phone (16) UI变换 下
阅读量:6857 次
发布时间:2019-06-26

本文共 2896 字,大约阅读时间需要 9 分钟。

 

矩阵变换,一句标准矩阵表示的变换

 复合变换按照指定顺序将多个变换复合为一个变换

组合变换按照固定顺序组合一系列变换

 

 

 表示二维 x-y 平面使用 3x3 矩阵进行自定义变换,上一篇文章中的四个变换类都是基于此得到,MtrixTransForm类是通过矩阵算法运行得到相应的效果

 

 

 

矩阵中第三列的值是固定不变的!
  原理:
  原坐标(x0,y0)通过这个3*3矩阵得到变换之后的新坐标(x1,y1)的过程如下:
 

    [x0,y0] *,通过矩阵乘法可得到坐标 (x0 * M11+x0 * M21,y0 * M12+y0 * M22)之后,再加上 (OffsetX,OffsetY) 即可得到新坐标(x1,y1)。也即是说最终坐标 (x1,y1) : x1 =  x0 * M11 + x0 * M21 + OffsetX , y1 = y0 * M12 + y0 * M22 + OffsetY.

 

1 <!--源码用法--> 
2 
3 <MatrixTransform Matrix=
"
M11 M12 M21 M22 OffsetX OffsetY
"></MatrixTransform>

 示例:

<Grid x:Name=
"
ContentPanel
" Grid.Row=
"
1
" Margin=
"
12,0,12,0
">
            <!--<TextBlock x:Name=
"
tb1
" FontSize=
"
72
" HorizontalAlignment=
"
Center
" VerticalAlignment=
"
Center
" Text=
"
变换文字示例
"  Foreground=
"
Cyan
"></TextBlock>-->
            <TextBlock x:Name=
"
tbShow
" FontSize=
"
72
" VerticalAlignment=
"
Center
" HorizontalAlignment=
"
Center
" Text=
"
变换文字示例
"  Foreground=
"
Cyan
">
                <TextBlock.RenderTransform>
                    <MatrixTransform Matrix=
"
0,1,2,1,2,2
"></MatrixTransform>
                </TextBlock.RenderTransform>
            </TextBlock>
        </Grid>

 效果:

 

 总结规律得到

 

        m11 ——X轴缩放
        m12 ——Y轴上倾斜
        m21 ——X轴上倾斜
        m22——Y轴缩放
        offsetX ——X轴上的位移
        offsetY ——Y轴上的位移

 部分参考:http://www.cnblogs.com/crazypig/archive/2012/02/20/2359599.html

                 http://www.oschina.net/question/213217_49488

 

表示对变换效果的一种复合,在TransformGroup中可以包含其他的变换,当然也嵌套TransformGroup

 

代码:

 

 

 

 <!--ContentPanel - TransformGroup-->
        <Grid x:Name=
"
ContentPanel
" Grid.Row=
"
1
" Margin=
"
12,0,12,0
">
            <TextBlock x:Name=
"
tbShow
" FontSize=
"
72
" VerticalAlignment=
"
Center
" HorizontalAlignment=
"
Center
" Text=
"
变换文字示例
"  Foreground=
"
Cyan
">
                <TextBlock.RenderTransform>
                    <TransformGroup>
                        <TranslateTransform  X=
"
-2
" Y=
"
3
"></TranslateTransform>
                        <ScaleTransform ScaleX=
"
0.8
" ScaleY=
"
0.9
"></ScaleTransform>
                        <RotateTransform Angle=
"
23
"></RotateTransform>
                        <TransformGroup>
                            <MatrixTransform Matrix=
"
1,0,1,1,0,1
"></MatrixTransform>
                        </TransformGroup>
                    </TransformGroup>
                </TextBlock.RenderTransform>
            </TextBlock>
        </Grid>

 

 这里需要注意的是我们在定义变换的顺序,因为每个变换都是基于上一个变换的基础进行变换,效果:

 

 

 

 是表示对变换的一种组合,并且具有顺序性,所有的变换都是通过属性进行设置的

 

        <!--ContentPanel - CompositeTransform-->
        <Grid x:Name=
"
ContentPanel
" Grid.Row=
"
1
" Margin=
"
12,0,12,0
">
            <TextBlock x:Name=
"
tbShow
" FontSize=
"
72
" VerticalAlignment=
"
Center
" HorizontalAlignment=
"
Center
" Text=
"
变换文字示例
"  Foreground=
"
Cyan
">
                <TextBlock.RenderTransform>
                    <CompositeTransform Rotation=
"
23
" TranslateX=
"
-2
" TranslateY=
"
3
" ScaleX=
"
0.8
" ScaleY=
"
0.9
" ></CompositeTransform>
                </TextBlock.RenderTransform>
            </TextBlock>
        </Grid>

 

 上面代码中用到属性的意思Rotation表示旋转的角度,TranslateX表示在X轴平移的位置量,TranslateY表示在Y轴平移的位置量,ScaleX表示在X轴缩放的尺寸,ScaleY表示在Y轴缩放的尺寸;

 

 TransformGroup 和CompositeTransfom异同:两者可以设置相同的属性得到相同的效果,在TransformGroup中我们可以使用 TransformGroup进行相同变换的多次使用,但是在CompositeTransfom中使用属性是不允许的,还有就是在 TransformGroup我们可以使用自定义变换,但是在组合变换CompositeTransfom中并没有该属性;两者还需要注意的是顺序性,不同的顺序,实现的效果不同;

 

本文转自shenzhoulong  51CTO博客,原文链接:http://blog.51cto.com/shenzhoulong/840745,如需转载请自行联系原作者

你可能感兴趣的文章
【USACO 1.4】Mother's Milk
查看>>
CentOs 设置静态IP 方法
查看>>
使用Maven构建多模块项目
查看>>
李洪强经典面试题47--UNIX常用命令
查看>>
angularjs中templateUrl的路径问题
查看>>
Linux 命令详解(三)./configure、make、make install 命令
查看>>
分享Kali Linux 2017年第31周镜像文件
查看>>
03-老马jQuery教程-DOM操作
查看>>
mongodb09----replicattion set--健壮性
查看>>
sql中的笛卡尔积
查看>>
C Array length function problem - C / C++
查看>>
ASP.NET中26个常用性能优化方法
查看>>
Objective-C利用协议实现回调函数
查看>>
angularjs的$window功能小练习
查看>>
Bayesian generalized linear model (GLM) | 贝叶斯广义线性回归实例
查看>>
Pulsar-Producer实现简介
查看>>
<转载>构造函数与拷贝构造函数
查看>>
[转]K近邻算法
查看>>
在Fedora8上的Tomcat上deploy一个war
查看>>
Swing的GUI组件得到焦点
查看>>