第二十一章 變換(四)

2021-09-19 20:28:08 字數 1607 閱讀 9473

跳躍和動畫

buttonjump程式主要用於演示無論您使用翻譯在螢幕上移動按鈕的位置,button都會以正常方式響應按鍵。 xaml檔案將button放在頁面中間(減去頂部的ios填充):

對於每次呼叫onbuttonclicked處理程式,**隱藏檔案將translationx和translationy屬性設定為新值。 新值隨機計算但受限制,以便button始終保持在螢幕邊緣:

public partial class buttonjumppage : contentpage

void onbuttonclicked(object sender, eventargs args)

}

例如,如果button的寬度為80個單位,而contentview的寬度為320個單位,則差異為240個單位,當button位於contentview的中心時,button的每一側為120個單位。 random的nextdouble方法返回0到1之間的數字,減去0.5會產生介於-0.5和0.5之間的數字,這意味著translationx被設定為介於-120和120之間的隨機值。這些值可能將button定位到螢幕的邊緣,但沒有超越。

請記住,translationx和translationy是屬性而不是方法。它們不是累積的。如果將translationx設定為100然後設定為200,則視覺元素不會從其布局位置偏移總共300個單位。第二個translationx值200替換而不是新增到初始值100。

使用buttonjump程式幾秒鐘可能會引發乙個問題:這可以動畫嗎? button可以滑向新點而不是簡單地跳到那裡嗎?

當然。有幾種方法可以做,包括下一章討論的xamarin.forms動畫方法。 buttonglide程式中的xaml檔案與buttonjump中的xaml檔案相同,只是button現在有乙個名稱,以便程式可以在clicked處理程式之外輕鬆引用它:

**隱藏檔案通過將幾個基本資訊儲存為字段來處理按鈕單擊:指示從translationx和translationy的當前值獲得的起始位置的點; 通過從隨機目的地點減去該起點計算的向量(也是點值); 和單擊按鈕時的當前datetime:

public partial class buttonglidepage : contentpage

void onbuttonclicked(object sender, eventargs args)

bool ontimertick()

}

t = math.sin(t * math.pi / 2);
當動畫開始時t的原始值為0時,math.sin的引數為0,結果為0.當t的原始值為1時,math.sin的引數為π/ 2,並且 結果是1.但是,這兩點之間的值不是線性的。 當t的初始值為0.5時,該語句將t重新計算為45度的正弦值,即0.707。 因此,當動畫結束一半時,button已經將70%的距離移動到目的地。 總的來說,你會看到乙個動畫在開始時更快,到最後更慢。

在本章中,您將看到幾種不同的動畫方法。 即使您已經熟悉xamarin.forms提供的動畫系統,有時候自己動手也很有用。

第二十一章 變換(七)

錨定規模 以下是一些螢幕截圖,顯示 從左到右 相對於左下角相對於右下角和相對於中心底部的縮放 如果您熟悉ios程式設計,則可以了解類似的anchorpoint屬性。在ios中,此屬性會影響定位和轉換中心。在xamarin.forms中,anchorx和anchory屬性僅指定轉換中心。這意味著xam...

第二十一章 變換(八)

旋轉 屬性旋轉螢幕表面上的可視元素。將 旋轉 屬性設定為以度為單位的角度 不是弧度 正角度順時針旋轉元素。您可以將 旋轉 設定為小於0或大於360的角度。實際旋轉角度是旋轉屬性模數360的值。元素圍繞相對於使用anchorx和anchory屬性指定的自身的點旋轉。planerotationdemo程...

第二十一章 變換(十三)

垂直滑塊?某些觀點是否可以輪換並仍然可以正常工作?更具體地說,xamarin.forms的普通水平slider元素可以旋轉成垂直滑塊嗎?我們來試試吧。verticalsliders程式在stacklayout中包含三個滑塊,stacklayout本身逆時針旋轉90度 果然,所有三個滑塊現在都是垂直定...