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

Windows Phone 7 不温不火学习之《画图》

[复制链接]

尚未签到

发表于 2015-5-8 14:10:35 | 显示全部楼层 |阅读模式
  在Android 我们需要在屏幕画图,或扩展SurfaceView 或扩展父类View 在OnDraw()里面使用画板和调色笔画画。而在微软的强大封装下,这种画图的试成为了控件的可能,微软将众多日常必要的画图都以控件展示,开发人员则无须过多学习使用Paint 、使用Canvas 等画图知识就能轻松在WP7 手机上画各种图,不过这种灵活性是否会降低呢?这个姑且不深究。
  今天学习的WP7 画图控件有以下几种:

  • InkPresenter 可否单纯理解为画图面板?
  • Path 路径
  • Ellipse 圆形或椭圆形
  • Rectangle 矩形,方块矩形或圆角矩形
  • Line 直线
  • Polygon 封闭多边形
  • Polyline 开放多边形
1.InkPresenter 实现方式:
  为其添加三个事件监听,实现其按下到离开的画图路径:
  


            
  
  
  监听内部实现代码都有添加注释,代码如下:
  


public partial class InkPresenterPage : PhoneApplicationPage
    {
        //从手指落下到抬起就称为一个Stroke
        Stroke mStroke;
        public InkPresenterPage()
        {
            InitializeComponent();
        }
        private void inkPresenter1_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
        {
            //捕捉按下动作
            inkPresenter1.CaptureMouse();
            //一个按下触发的动作为stroke ,对于这些stroke 的点为stylusPoint,故要创建一个集合的点
            StylusPointCollection spc = new StylusPointCollection();
            //从inkPresenter 中得到每个stylusPoint 并添加到集合里面
            spc.Add(e.StylusDevice.GetStylusPoints(inkPresenter1));
            //实例化一个stroke到inkPresenter里面
            mStroke = new Stroke();
            //将stroke 添加
            this.inkPresenter1.Strokes.Add(mStroke);
        }
        ///
        /// 当手指移动时,将styluspoint 存进stroke
        ///
        ///
        ///
        private void inkPresenter1_MouseMove(object sender, MouseEventArgs e)
        {
            if (mStroke!=null)
            {
                mStroke.StylusPoints.Add(e.StylusDevice.GetStylusPoints(inkPresenter1));
            }
           
        }
        ///
        /// 当弹起时重新初始化stroke 为null
        ///
        ///
        ///
        private void inkPresenter1_LostMouseCapture(object sender, MouseEventArgs e)
        {
            mStroke = null;
        }
        ///
        /// 清空inkPresenter里面的Stroke
        ///
        ///
        ///
        private void button1_Click(object sender, RoutedEventArgs e)
        {
            this.inkPresenter1.Strokes.Clear();
        }  
  最终实现效果:
DSC0000.png
  
2.Path 路径
  Path 是众多画图控件使用起来较为麻烦的一个。因为其可以通过两种绘制的方式绘制图形,分别为如下:

  • Markup Syntax 可以绘制一个系列的线条
  • Geometries 绘制形状,
  以一个圆形的Path 图形为例,通过实现EllipseGeometries 绘制图形,实现代码如下:
  



               
                    
               
              
  另外Path 还支持Path.Data 数据集,即使用GeometryGroup,在对应的下文可以添加多个形状的图形,代码如下:
  


  
               
                    
                        
                        
                    
               
              
  Tip:GeometryGroup 的FillRule 分为两种模式,一种为“不叠加-Evenodd”,另一种为“叠加-Nonzero”。
  
  Path 的另外一种实现方式为系列线实现模式,实现此模式须把Fill  去掉,否则会在线条之间填充颜色值。实现此系列线相对要复杂一些,必须掌握一定的mini Language 为其添加Data,下面是一些Mini Language 的命令:

  • 移动命令:
                M:绝对起始点 m:相对于前一点的起始点 如:M 100 ,200 M即Move 移动,移动到Left:100,Top:200这个位置开始
  • 直线命令:
                L:L/l 直线的结束点,如:L 100,200 即画从M的开始点左画100并停留在Top为200的位置,在这个位置开始弯折
  • 水平线命令:
                H:水平线的长度
  • 垂线命令:
                V:垂直线的长度
  • 二次贝赛尔曲线命令:
                Q:控制点坐标,结束点坐标
                如:Q 100 ,200 300,200
  • 三次贝赛尔曲线命令:
                C:控制点坐标,控制点坐标,结束点坐标
  • 光滑二次贝赛尔曲线命令:
                T:控制点坐标,结束点坐标
                如:T 100,200 300,200
  • 光滑三次贝赛 尔曲线命令:
                S:控制点坐标,结束点坐标
                如:S 100,200 200,300
  • 圆弧命令:
                A:弧大小(半径值)、弧角、优弧弧标记(1大于等于180度,0小于180度)、正负弧标记、结束点
                如:A 5,5 0 0 0 10,10
  • 闭合命令:
                Z:将创建的曲线封闭
  下面给出一个实现的样例代码:
  


    
  
  上面三个实现的Path 效果分别为下图:
DSC0001.png
  
3.Ellipse 圆形或椭圆形
  Ellipse 使用起来就比较简单,只要注意设置它的高和宽之间的大小,实现代码如下:
  



              
  
  实现效果:
DSC0002.png
  
4.Rectangle 矩形,方块矩形或圆角矩形
  跟上面的Ellipse 实现也同样方便,注意设置它的RadiusX 和 RadiusY ,代码如下:
  



              
  
  实现效果如下图:
DSC0003.png
  
5.Line 直线
  直线需要注意的是它有四个坐标要设置,即X1 Y1 X2 Y2,x代表直线起始点和结束点的相对自己的位置,相同则成垂直,如果不相等则倾斜或者横放,Y 代表两点之间的长度,以Y1为起点画到Y2为结束点,实例代码如下:
  


  
              
  
  上图代码,实现效果如下:
DSC0004.png
  
6.Polygon 封闭多边形
  封闭多边形:两两数字分为一边,以x,y的形式画边.可以任意组合多组坐标,示例代码如下:
  


    
  
  上面代码实现效果如下:
DSC0005.png
  
7.Polyline 开放多边形
  非封闭多边形:以封闭多边形的三角从标为例,上图为封闭多边形的三角形写法,可以看出图上并不为我们封闭。要做封闭必须自己手动再添加封闭线,示例代码如下:
  



              
  
  上面代码实现效果如下:
DSC0006.png
  
  可以看出,相对于Android 的画图要来得轻松方便许多,如果可以开放这些接口在自定义控件的时候可以为控件画图效果那就更好了,类似于Android 的OnDraw面板。
  
  源码下载:点击这里
  本篇代码和实现原理参考自 小镇 Windows Phone 7画图视频。

运维网声明 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-65026-1-1.html 上篇帖子: 新Windows phone 7中文输入工具上线 下篇帖子: Windows 7 任务栏开发 之 缩略图预览(Thumbnail)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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