有没有其他方法可以访问Cached
Image的
ImageInformation中的OriginalHeight和OriginalWidth,除了检查成功加载如下?
CachedImage img = new CachedImage() { CacheType = FFImageLoading.Cache.CacheType.Memory }; img.Source = GetNextImage(); img.Success += (sender,e) => { h = e.ImageInformation.OriginalHeight; w = e.ImageInformation.OriginalWidth; if (Device.Idiom == TargetIdiom.Phone) { if (h > w) { img.HeightRequest = 400; } } if (Device.Idiom == TargetIdiom.Tablet) { if (h > w) { img.HeightRequest = 800; } } };
解决方法
使用FFImageLoading库,你的方法是正确的w / Success,但如果你有资源文件夹下的图像,也许可以使用下面的方法/想法:
PLC /标准:
using Xamarin.Forms; namespace YourProject.Utils { public interface IImageResource { Size GetSize(string fileName); } }
安卓:
using Android.Graphics; using YourProject.Droid.Utils; using YourProject.Utils; using System; using Xamarin.Forms; [assembly: Dependency(typeof(ImageResource))] namespace YourProject.Droid.Utils { public class ImageResource : Java.Lang.Object,IImageResource { public Size GetSize(string fileName) { var options = new BitmapFactory.Options { InJustDecodeBounds = true }; fileName = fileName.Replace('-','_').Replace(".png","").Replace(".jpg",""); var resId = Forms.Context.Resources.GetIdentifier(fileName,"drawable",Forms.Context.PackageName); BitmapFactory.DecodeResource(Forms.Context.Resources,resId,options); return new Size((double)options.OutWidth,(double)options.OutHeight); } } }
iOS版:
using YourProject.iOS.Utils; using YourProject.Utils; using System; using UIKit; using Xamarin.Forms; [assembly: Dependency(typeof(ImageResource))] namespace YourProject.iOS.Utils { public class ImageResource : IImageResource { public Size GetSize(string fileName) { UIImage image = UIImage.FromFile(fileName); return new Size((double)image.Size.Width,(double)image.Size.Height); } } }
使用w / Xamarin.Forms.DependencyService:
var imageSize = DependencyService.Get<IImageResource>().GetSize("ic_launcher.png"); System.Diagnostics.Debug.WriteLine(imageSize);
XAML的另一个选择:
<ContentView.Resources> <ResourceDictionary> <Style x:Key="CachedImageStyle" TargetType="{x:Type ffimageloading:CachedImage}"> <Setter Property="HorizontalOptions" Value="Center" /> <Setter Property="VerticalOptions" Value="Center" /> <Setter Property="HeightRequest"> <Setter.Value> <OnIdiom x:TypeArguments="x:Double" Tablet="800" Phone="400" /> </Setter.Value> </Setter> </Style> </ResourceDictionary> </ContentView.Resources> <ContentView.Content> <!-- ... --> <ffimageloading:CachedImage x:Name="cachedImg" Style="{StaticResource CachedImageStyle}"> </ffimageloading:CachedImage> <!-- ... --> </ContentView.Content>
然后,您可以创建转换器以设置平板电脑/手机大小,也许是有效的.
我希望这可以帮到你.