public ExtendMedia ParseExtendMedia(JObject obj) { var extendMedia = new ExtendMedia { ID = obj["id"].ToObject <long>(), Indices = ParseIndices(obj["indices"].ToObject <JArray>()), MediaURL = obj["media_url"].ToString(), MediaURLHttps = obj["media_url_https"].ToString(), URL = ParseURL(obj), Type = obj["type"].ToString() }; if (obj.ContainsKey("video_info")) { var infoObj = obj["video_info"].ToObject <JObject>(); var info = new VideoInformation { AspectRatio = ParseIndices(infoObj["aspect_ratio"].ToObject <JArray>()), //animated_gif doesn't have duration_millis data Duration = SafeGetLong(infoObj, "duration_millis") }; var variantArray = infoObj["variants"].ToObject <JArray>(); info.Variants = ParseArray(variantArray, ParseVideoVariant); extendMedia.Video = info; } return(extendMedia); }
public MediaView(MediaPage parent, ExtendMedia media) { this.parent = parent; Image.Source = media.MediaURLHttps; Image.DownloadProgress += Image_DownloadProgress; Image.Finish += Image_Finish; ImageProgressBar.Progress = 0; Layout.Children.Add(Image); Layout.Children.Add(ImageProgressBar); AbsoluteLayout.SetLayoutBounds(Image, new Rectangle(0, 0, 1, 1)); AbsoluteLayout.SetLayoutFlags(Image, AbsoluteLayoutFlags.All); AbsoluteLayout.SetLayoutBounds(ImageProgressBar, new Rectangle(0.1, 0.45, 0.8, 0.15)); AbsoluteLayout.SetLayoutFlags(ImageProgressBar, AbsoluteLayoutFlags.All); var gesture = new PanGestureRecognizer(); gesture.PanUpdated += (sender, e) => { switch (e.StatusType) { case GestureStatus.Running: Image.TranslationX = e.TotalX; Image.TranslationY = e.TotalY; break; case GestureStatus.Completed: if (Math.Abs(Image.TranslationY) > (parent.Height / 8)) { App.Navigation.RemovePage(parent); } Image.TranslateTo(0, 0); break; } }; Image.GestureRecognizers.Add(gesture); }
private View MakeMediaView(ExtendMedia media) { var view = new MediaView(this, media); return(view.Layout); }