我有一个GridView,里面有一组ImageViews。我在GetView中创建图像如下:
public override View GetView(int position, View convertView, ViewGroup parent)
{
ImageView imageView;
if (convertView == null)
{ // if it's not recycled, initialize some attributes
imageView = new ImageView(context);
imageView.LayoutParameters = new GridView.LayoutParams(118, 132); // images are all the same dimension
imageView.SetScaleType(ImageView.ScaleType.FitXy);
imageView.SetPadding(5, 5, 5, 0);
}
else
{
imageView = (ImageView)convertView;
}
imageView.SetImageResource(thumbIds[position]);
return imageView;
}
// references to our images
int[] thumbIds =
{
Resource.Drawable.IconAdvocacy, Resource.Drawable.IconBusinessServices,
Resource.Drawable.IconContactUs, Resource.Drawable.IconDistrict,
Resource.Drawable.IconEvents, Resource.Drawable.IconFind,
Resource.Drawable.IconLawsRegs, Resource.Drawable.IconHealth,
Resource.Drawable.IconPracMgmt, Resource.Drawable.IconPublications,
Resource.Drawable.IconUpdates, Resource.Drawable.IconUploadPhoto
};
如您所见,我在LayoutParams函数中定义了固定大小。这会导致每个设备上的图像大小相同。
问题:缩放图像的最佳方法是什么?
我应该: 1)只需在每个drawable,-hdpi,-ldpi和-mdpi文件夹中创建不同大小的图像?如果是这样,我如何指定LayoutParams的大小?
2)获取DisplayMetrics?如果是这样,我该怎么做?我无法获得有关如何执行此操作的MonoDroid信息。文档中的示例似乎不起作用。
非常感谢任何帮助!!
谢谢
答案 0 :(得分:0)
好吧,我认为既然你有一定数量的图像并且你没有动态加载它们,那么就可以提前创建你需要的资源,就像你在选项1中指定的一样。如果你我需要动态加载或动态加载图像,然后我可能会建议选择2路径。
选项1
要获取所有布局的图像,您可以为dpi扩展指定-land(landscape)和-port(portrait)扩展名。因此,例如,您可以使用drawable-mdpi-port和drawable-mdpi-land。有关选项的完整列表和一些更详细的信息,请参阅Supporting Multiple Screens文档。
选项2
此代码应该可以很好地通过代码获取当前显示密度。如果你从一个活动中调用它,这应该是完全正常的。如果您是从片段或诸如此类的东西进行调用,请确保首先引用该活动。
var metrics = new DisplayMetrics();
this.WindowManager.DefaultDisplay.GetMetrics(metrics);
switch (metrics.DensityDpi)
{
case DisplayMetricsDensity.Default:
break;
case DisplayMetricsDensity.High:
break;
case DisplayMetricsDensity.Low:
break;
case DisplayMetricsDensity.Xhigh:
break;
}