繪制動畫
每一幀動畫都是在timer1_Tick方法中繪制到緩沖區中的CurrentShownBitmap對象上。CurrentShownBitmap方法僅僅是將繪制到屏幕上。
主要功能說明
計算動畫中每一幀裡B和C部分的圖象都是由以下方法完成的:
private GraphicsPath GetPageUnderGraphicsPath(int x,
refdouble a, int height, int width,
bool isUnderSide, TurnType type)
參數x代表從頁面邊緣到熱點處的距離(前面已經說明),height和width參數代表當前頁面要顯示的高度和寬度。isUnderSide參數用來告訴程序是否在計算C部分區域(正在翻動的那一頁的背面),最後一個參數type是表示頁面是左翻頁還是右翻頁。基本上,isUnderSide和type參數是用來獲取圖形路徑的正確性的,參數a如上所述是代表當前角度的。參數a傳遞的是引用,隨後將在繪制C之前用於旋轉坐標(見圖4和圖5)。
使用代碼
安裝控件
為了簡單起見,這個控件有自己的圖片。初始化圖象的代碼在LoadSamples()方法中。這個方法在Sample類的構造方法中調用。
控制翻頁的速度和數目
翻頁的速度是通過一個timer來控制的,public屬性TickSpeed能用來控制翻頁速度(毫秒為單位),動畫的幀數是通過每個timer間隔熱點移動的距離來控制的。public屬性暴露給外界以控制已經移動的距離x。
調整高度
沿著背頁的頂部裁減是一個問題,public屬性HeightAdjustment用於在控件頂部留一點空白區域便於裁剪。
開始動畫
這個組件公開兩個方法來開始動畫。
animateRightPageTurn() and animateLeFTPageTurn().
注意事項
我本來試圖解當h=PAGE_HEIGHT時的非線性方程h = x Tan( 45 + ((45 * (x)) / PAGE_WIDTH) )中的x的值,我的這個蠻力辦法的代碼包含在源代碼中。是不是還有一個更優雅的辦法呢?
說明:程序的源代碼可以到http://download.csdn.Net/source/381727下載。