Rg.Popup-Xamarin Forms翻譯

原文:

https://github.com/rotorgames/Rg.Plugins.Popup

譯者寫的教程:

http://www.reibang.com/p/5e5663b6d1ba

Xamarin Forms的彈出頁面插件

插件可以讓你使用任何Page彈出。
Nuget:
https://www.nuget.org/packages/Rg.Plugins.Popup/

支持的平臺:

  • Android
  • iOS
  • Windows Phone
  • UWP

PopupPage重寫的方法:

  • OnAppearing
  • OnDisappearing
  • OnBackButtonPressed
  • OnAppearingAnimationEnd
  • OnDisappearingAnimationBegin
  • OnBackgroundClicked

事件:

  • BackgroundClicked: 當(dāng)點擊背景的時候觸發(fā)至扰。

動畫:

FadeAnimation(淡化動畫):

  • DurationIn (uint):
  • DurationOut (uint)
  • EasingIn (Easing)
  • EasingOut (Easing)
  • HasBackgroundAnimation (bool):背景動畫

MoveAnimation(移動動畫):

  • PositionIn (MoveAnimationOptions)
  • PositionOut (MoveAnimationOptions)
  • DurationIn (uint)
  • DurationOut (uint)
  • EasingIn (Easing)
  • EasingOut (Easing)
  • HasBackgroundAnimation (bool)

ScaleAnimation(縮放動畫):

  • ScaleIn (double)
  • ScaleOut (double)
  • PositionIn (MoveAnimationOptions)
  • PositionOut (MoveAnimationOptions)
  • DurationIn (uint)
  • DurationOut (uint)
  • EasingIn (Easing)
  • EasingOut (Easing)
  • HasBackgroundAnimation (bool)

初始化:

Android, iOS, WP不需要初始化掂僵。
如果您使用.NET Native編譯竿拆,UWP需要在Xamarin.Forms.Forms.Init方法中添加程序集:

UWP 例子:

// In App.xaml.cs
protected override void OnLaunched(LaunchActivatedEventArgs e)
{
    ...

    // 由于在釋放模式下編譯時出現(xiàn)錯誤暴氏,因此需要進行初始化厅贪。
    // 詳情參考:https://developer.xamarin.com/guides/xamarin-forms/platform-features/windows/installation/universal/#Troubleshooting
    
    Xamarin.Forms.Forms.Init(e, Rg.Plugins.Popup.Windows.Popup.GetExtraAssemblies());

    // 或者如果您有其他渲染器和DependencyService實現(xiàn)

    var assemblies = new List<Assembly>
    {
       typeof(YourRenderer).GetTypeInfo().Assembly
       typeof(YourServiceImplementation).GetTypeInfo().Assembly
    };

    Xamarin.Forms.Forms.Init(e, Rg.Plugins.Popup.Windows.Popup.GetExtraAssemblies(assemblies));

    ...
}

PopupPage屬性:

IsAnimating
Animation
BackgroundColor: 16進制 #80FF5C5C 其中 #80 是不透明度 Range
CloseWhenBackgroundIsClicked: 點擊背景時關(guān)閉彈出窗口
HasSystemPadding: 啟用/禁用系統(tǒng)填充偏移(僅適用于內(nèi)容不適用于背景)

image.png
image.png

SystemPadding:(只讀)厚度

如何使用:

// 在全局PopupNavigation中使用這些方法或在您的頁面中導(dǎo)航

// 打開一個新的PopupPage
Task PushAsync(PopupPage page, bool animate = true) // Navigation.PushPopupAsync

// 隱藏最后一個PopupPage
Task PopAsync(bool animate = true) // Navigation.PopPopupAsync

// 隱藏所有PopupPage與動畫
Task PopAllAsync(bool animate = true) // Navigation.PopAllPopupAsync

// 在堆棧中刪除一個彈出頁面
Task RemovePageAsync(PopupPage page, bool animate = true) // Navigation.RemovePopupPageAsync
<?xml version="1.0" encoding="utf-8" ?>
<pages:PopupPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             xmlns:pages="clr-namespace:Rg.Plugins.Popup.Pages;assembly=Rg.Plugins.Popup"
             xmlns:animations="clr-namespace:Rg.Plugins.Popup.Animations;assembly=Rg.Plugins.Popup"
             x:Class="Demo.Pages.MyPopupPage">
  <!--動畫使用示例-->
  <pages:PopupPage.Animation>
    <animations:ScaleAnimation 
      PositionIn="Center"
      PositionOut="Center"
      ScaleIn="1.2"
      ScaleOut="0.8"
      DurationIn="400"
      DurationOut="300"
      EasingIn="SinOut"
      EasingOut="SinIn"
      HasBackgroundAnimation="True"/>
  </pages:PopupPage.Animation>
  <!-- Content -->
</pages:PopupPage>
public partial class MyPopupPage : PopupPage
    {
        public SecondPopupPage()
        {
            InitializeComponent();
        }

        protected override void OnAppearing()
        {
            base.OnAppearing();
        }

        protected override void OnDisappearing()
        {
            base.OnDisappearing();
        }
        
        // PopupPage中動畫兒童的方法
        // 自定義動畫結(jié)束后調(diào)用
        protected virtual Task OnAppearingAnimationEnd()
        {
            return Content.FadeTo(0.5);
        }

        // PopupPage中動畫兒童的方法
        // 在自定義動畫開始之前調(diào)用
        protected virtual Task OnDisappearingAnimationBegin()
        {
            return Content.FadeTo(1);;
        }

        protected override bool OnBackButtonPressed()
        {
            // 防止隱藏彈出窗口
            //return base.OnBackButtonPressed();
            return true; 
        }

        // 當(dāng)背景點擊時調(diào)用
        protected override bool OnBackgroundClicked()
        {
            // 返回默認(rèn)值 - CloseWhenBackgroundIsClicked
            return base.OnBackgroundClicked();
        }
    }

    ```
    // MainPage
    
    public partial class MainPage : ContentPage
    {
        public MainPage()
        {
            InitializeComponent();
        }
        
        // 按鈕點擊
        private async void OnOpenPupup(object sender, EventArgs e)
        {
            var page = new MyPopupPage();
            
            await Navigation.PushPopupAsync(page);
            // 或者
            await PopupNavigation.PushAsync(page);
        }
    }
## 使用動畫:

// 使用動畫
class UserAnimation : IPopupAnimation
{
// 在OnAppering之前調(diào)用
public void Preparing(View content, PopupPage page)
{
// Preparing content and page
content.Opacity = 0;
}

    // 在OnDisappering后調(diào)用
    public void Disposing(View content, PopupPage page)
    {
        // Dispose Unmanaged Code
    }
    
    //  OnAppering之后調(diào)用
    public async Task Appearing(View content, PopupPage page)
    {
        // 顯示動畫
        await content.FadeTo(1);
    }
    
    // OnDisappering之前調(diào)用
    public async Task Disappearing(View content, PopupPage page)
    {
        // 隱藏動畫
        await content.FadeTo(0);
    }
}

// Popup Page
public partial class UserPopupPage : PopupPage
{
public SecondPopupPage()
{
InitializeComponent();
Animation = new UserAnimation();
}
}

## 或者在Xaml上

<?xml version="1.0" encoding="utf-8" ?>
<pages:PopupPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:pages="clr-namespace:Rg.Plugins.Popup.Pages;assembly=Rg.Plugins.Popup"
xmlns:animations="clr-namespace:Demo.Animations;assembly=Demo"
x:Class="Demo.Pages.UserAnimationPage">
<pages:PopupPage.Animation>
<animations:UserAnimation/>
</pages:PopupPage.Animation>
...
</pages:PopupPage>

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末山涡,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子必怜,更是在濱河造成了極大的恐慌洼畅,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,378評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件棚赔,死亡現(xiàn)場離奇詭異帝簇,居然都是意外死亡,警方通過查閱死者的電腦和手機靠益,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,356評論 2 382
  • 文/潘曉璐 我一進店門丧肴,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人胧后,你說我怎么就攤上這事芋浮。” “怎么了壳快?”我有些...
    開封第一講書人閱讀 152,702評論 0 342
  • 文/不壞的土叔 我叫張陵纸巷,是天一觀的道長。 經(jīng)常有香客問我眶痰,道長瘤旨,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,259評論 1 279
  • 正文 為了忘掉前任竖伯,我火速辦了婚禮存哲,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘七婴。我一直安慰自己祟偷,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 64,263評論 5 371
  • 文/花漫 我一把揭開白布打厘。 她就那樣靜靜地躺著修肠,像睡著了一般。 火紅的嫁衣襯著肌膚如雪户盯。 梳的紋絲不亂的頭發(fā)上嵌施,一...
    開封第一講書人閱讀 49,036評論 1 285
  • 那天,我揣著相機與錄音先舷,去河邊找鬼艰管。 笑死滓侍,一個胖子當(dāng)著我的面吹牛蒋川,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播撩笆,決...
    沈念sama閱讀 38,349評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼捺球,長吁一口氣:“原來是場噩夢啊……” “哼缸浦!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起氮兵,我...
    開封第一講書人閱讀 36,979評論 0 259
  • 序言:老撾萬榮一對情侶失蹤裂逐,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后泣栈,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體卜高,經(jīng)...
    沈念sama閱讀 43,469評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,938評論 2 323
  • 正文 我和宋清朗相戀三年南片,在試婚紗的時候發(fā)現(xiàn)自己被綠了掺涛。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,059評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡疼进,死狀恐怖薪缆,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情伞广,我是刑警寧澤拣帽,帶...
    沈念sama閱讀 33,703評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站嚼锄,受9級特大地震影響减拭,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜区丑,卻給世界環(huán)境...
    茶點故事閱讀 39,257評論 3 307
  • 文/蒙蒙 一峡谊、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧刊苍,春花似錦既们、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,262評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至婴氮,卻和暖如春斯棒,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背主经。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工荣暮, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人罩驻。 一個月前我還...
    沈念sama閱讀 45,501評論 2 354
  • 正文 我出身青樓穗酥,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子砾跃,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,792評論 2 345

推薦閱讀更多精彩內(nèi)容