Windows mobile 开发入门—开发绚丽滑动效果

前言
    在这里制作一个9宫格的小程序,如果超过9个,那么就自动翻页。翻页采用划动实现,并且有惯性作用。

原理

mobile手机里滑动效果主要是原理是支持屏幕的触摸,当我们按下、松开时系统分别可以捕捉到相应的坐标位置,然后动态的改变布局,从而达到划动的效果。
图型button

由于mobile还没有支持图片button,所以我们做出一个辅佐类,当按下、弹开时分别使用钢笔绘制不同的图片到屏幕。

Code

当mouse按下时,判断是否在图像所在的区域内,就执行按下时绘制图像。并且判断两次按下时间小于300毫秒,就认为是双击,发出注册双击事件。当mouse弹起时,恢复按前的图像,并且如果按下时间间隔不超过100毫秒,认为是单击。

初使化按扭

Code


程序中的button,放置在XML中,以方便动态的加载。pat是正常的路径,presspath是按下时显示的图片。

Code

 

 

mobile中获取文件的路径与windows下不同, string path = System.IO.Path.GetDirectoryName(Assembly.GetExecutingAssembly().GetName().CodeBase);

这样才能找到当前动行的程序路径.

在对XML文件中的初使化,并赋值给图像按钮,并且注册事件

Point是分页时在下方的位置产生一个小圆点,代表页数和当前页。


绘制按扭

Code

 

    

OnPaint 是窗体的方法,它是在调用Invalidate后自动执行。在这里控制每行显示3个,每页显示9个,如果有分页画划分页小圆点。在系统初使化,mouse 按下,弹出时都调用Invalidate方法,放系统重画UI。为了防卡需要override OnPaintBackground,这点我也不是很明白,如果有高手请多指教。

实现划动效果

void Form1_MouseDown(object sender, MouseEventArgs e)
     {
        x=e.X;
        y = e.Y;
     }

     void Form1_MouseMove(object sender, MouseEventArgs e)
     {
         moveX = e.X - x;
         moveY = e.Y - y;
         if ((Math.Abs(moveX) + Math.Abs(moveY)) > 5)
         {  
           this.Invalidate();           
         }
     }

mouse按下时,记录坐标,弹起时,计算偏移量,并且重绘UI.这对手机的性能有一定的要求,可能会有点卡,但是我个人觉得还是可以接受.不知各位有没有更好的方法.

 

实现惯性

当划动到边的松开时候,如果有下一页,则翻到下一页,如果没有,则慢慢的返回到原来的位置。

实现这个功能主要是使用一个timer控件。用TIMER来计算位置,具体实现请看代码。

 

参考:http://iphoneui.codeplex.com/

下载:https://files.cnblogs.com/mediar/MobileTest.rar

posted @ 2009-08-27 16:08  瑞德船长  阅读(5277)  评论(20编辑  收藏  举报