public static void RegisterFlipPage(MenuCommand menuCommand) { GameObject book = CreateFlipPage(UIMenuTools.GetStandardResources()); UIMenuTools.PlaceUIElementRoot(book, menuCommand); // 以下必须在此执行,若放在CreateFlipPage中会因为新建对象层级未绑定以至canvas为null FlipPage flipPage = book.GetComponentInChildren <FlipPage>(); Canvas canvas = book.GetComponentInParent <Canvas>(); flipPage.canvas = canvas; flipPage.bookPanel = book.transform as RectTransform; }
// Constructor public MainPage() { InitializeComponent(); this.ManipulationStarted += new EventHandler<ManipulationStartedEventArgs>(_uppart_ManipulationStarted); this.ManipulationDelta += new EventHandler<ManipulationDeltaEventArgs>(_uppart_ManipulationDelta); this.ManipulationCompleted += new EventHandler<ManipulationCompletedEventArgs>(_uppart_ManipulationCompleted); _pageElements.Add(_border0); _pageElements.Add(_border2); _pageElements.Add(_border1); _pixellist = new PixelData[6]; _bmps = new WriteableBitmap[6]; for (int i = 0; i < _bmps.Length; ++i) { var bmp = new WriteableBitmap(480, 400); _bmps[i] = bmp; _pixellist[i].Pixels = bmp.Pixels; } _samplebitmaps = new List<WriteableBitmap>(); string[] fn = new string[] { "img.jpg", "img01.jpg", "img02.jpg", "img03.jpg", "img04.jpg", "img05.jpg", "img06.jpg", "img07.jpg" }; foreach (var f in fn) { var wbmp = BitmapFromResource(f); var wbmpout0 = new WriteableBitmap(480, 400); var wbmpout1 = new WriteableBitmap(480, 400); SplitBitmap(wbmp, wbmpout0, wbmpout1); _samplebitmaps.Add(wbmpout0); _samplebitmaps.Add(wbmpout1); } var firstpage = new FlipPage { Front = _samplebitmaps[0], Back = _samplebitmaps[0] }; _pages.Add(firstpage); for (int i = 1; i < _samplebitmaps.Count - 1; i += 2) { var page = new FlipPage { Front = _samplebitmaps[i], Back = _samplebitmaps[i + 1] }; _pages.Add(page); } var lastpage = new FlipPage { Front = _samplebitmaps.Last(), Back = _samplebitmaps.Last() }; _pages.Add(lastpage); MovePageTo(0); const string XAML_MOVE_ANI = @" <Storyboard x:Name=""_sbCurrentPage"" xmlns=""http://schemas.microsoft.com/winfx/2006/xaml/presentation"" xmlns:x=""http://schemas.microsoft.com/winfx/2006/xaml"" > <DoubleAnimation Duration=""0:0:0.4"" To=""0"" Storyboard.TargetProperty=""CurrentPageNum""> <DoubleAnimation.EasingFunction> <PowerEase EasingMode=""EaseOut""/> </DoubleAnimation.EasingFunction> </DoubleAnimation> </Storyboard>"; _sbPageMove = XamlReader.Load(XAML_MOVE_ANI) as Storyboard; Storyboard.SetTarget(_sbPageMove, this); }
static GameObject CreateFlipPage(UIResources resources) { GameObject book = new GameObject("Book", typeof(RectTransform)); FlipPage flipPage = book.AddComponent <FlipPage>(); /*GameObject border = new GameObject("Border", typeof(Image)); * border.transform.parent = book.transform; * border.GetComponent<Image>().raycastTarget = false;*/ GameObject left = new GameObject("Left", typeof(Image)); (left.transform as RectTransform).pivot = Vector2.zero; left.transform.SetParent(book.transform); left.GetComponent <Image>().raycastTarget = false; left.GetComponent <Image>().enabled = true; left.AddComponent <HorizontalLayoutGroup>().childAlignment = TextAnchor.MiddleCenter; GameObject right = new GameObject("Right", typeof(Image)); (right.transform as RectTransform).pivot = Vector2.zero; right.transform.SetParent(book.transform); right.GetComponent <Image>().raycastTarget = false; right.GetComponent <Image>().enabled = true; right.AddComponent <HorizontalLayoutGroup>().childAlignment = TextAnchor.MiddleCenter; GameObject leftOnFlip = new GameObject("LeftOnFlip", typeof(Image), typeof(Mask)); (leftOnFlip.transform as RectTransform).pivot = Vector2.zero; leftOnFlip.GetComponent <Mask>().showMaskGraphic = true; leftOnFlip.GetComponent <Image>().raycastTarget = false; leftOnFlip.transform.SetParent(book.transform); leftOnFlip.SetActive(false); GameObject shadowLTR = new GameObject("ShadowLTR", typeof(Image)); shadowLTR.transform.SetParent(leftOnFlip.transform); shadowLTR.GetComponent <Image>().raycastTarget = false; shadowLTR.SetActive(false); GameObject rightOnFlip = new GameObject("RightOnFlip", typeof(Image), typeof(Mask)); (rightOnFlip.transform as RectTransform).pivot = Vector2.zero; rightOnFlip.GetComponent <Mask>().showMaskGraphic = true; rightOnFlip.GetComponent <Image>().raycastTarget = false; rightOnFlip.transform.SetParent(book.transform); rightOnFlip.SetActive(false); GameObject shadow = new GameObject("Shadow", typeof(Image)); shadow.transform.SetParent(rightOnFlip.transform); shadow.GetComponent <Image>().raycastTarget = false; shadow.SetActive(false); GameObject turnPageFlip = new GameObject("TurnPageFlip", typeof(Image), typeof(Mask)); turnPageFlip.GetComponent <Mask>().showMaskGraphic = false; turnPageFlip.GetComponent <Image>().raycastTarget = false; turnPageFlip.transform.SetParent(book.transform); GameObject nextOnFlip = new GameObject("NextOnFlip", typeof(Image), typeof(Mask)); nextOnFlip.GetComponent <Mask>().showMaskGraphic = false; nextOnFlip.GetComponent <Image>().raycastTarget = false; nextOnFlip.transform.SetParent(book.transform); GameObject leftHotSpot = new GameObject("LeftHotSpot", typeof(Image), typeof(EventTrigger)); leftHotSpot.GetComponent <Image>().color = new Vector4(1, 1, 1, 0); leftHotSpot.transform.SetParent(book.transform); GameObject rightHotSpot = new GameObject("RightHotSpot", typeof(Image), typeof(EventTrigger)); rightHotSpot.GetComponent <Image>().color = new Vector4(1, 1, 1, 0); rightHotSpot.transform.SetParent(book.transform); flipPage.left = left.GetComponent <Image>(); flipPage.right = right.GetComponent <Image>(); flipPage.leftOnFlip = leftOnFlip.GetComponent <Image>(); flipPage.rightOnFlip = rightOnFlip.GetComponent <Image>(); flipPage.clippingPlane = turnPageFlip.GetComponent <Image>(); flipPage.nextPageClip = nextOnFlip.GetComponent <Image>(); flipPage.shadow = shadow.GetComponent <Image>(); flipPage.shadowLTR = shadowLTR.GetComponent <Image>(); flipPage.leftHotSpot = leftHotSpot.GetComponent <Image>(); flipPage.rightHotSpot = rightHotSpot.GetComponent <Image>(); return(book); }
/// <summary> /// Append flip page /// </summary> /// <param name="backOfLast"></param> /// <param name="frontOfNew"></param> void AppendFlipPage(WriteableBitmap backOfLast, WriteableBitmap frontOfNew) { if (_pages.Count == 0) { var firstpage = new FlipPage { Front = backOfLast, Back = backOfLast }; var lastpage = new FlipPage { Front = frontOfNew, Back = frontOfNew }; _pages.Add(firstpage); _pages.Add(lastpage); } else { var lastpage = _pages.Last(); lastpage.Back = backOfLast; var newpage = new FlipPage { Front = frontOfNew, Back = frontOfNew }; _pages.Add(newpage); } }