2

ImageViewのセットを含むGridViewがあります。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)ドローアブル、-hdpi、-ldpi、および-mdpiフォルダーのそれぞれに異なるサイズの画像を作成するだけですか?その場合、LayoutParamsにサイズを指定するにはどうすればよいですか?

2)DisplayMetricsを取得しますか?もしそうなら、どうすればいいですか?これを行う方法に関するMonoDroid情報を取得できませんでした。ドキュメントの例は機能していないようです。

どんな助けでも大歓迎です!!

ありがとうございました

4

1 に答える 1

0

固定数の画像があり、それらを動的にロードしていないので、オプション 1 で指定した方法のように、必要なリソースを事前に作成するだけで十分安全だと思います。その場で動的にロードするか、画像のサイズを変更する場合は、オプション 2 パスを使用することをお勧めします。

オプション1

すべてのレイアウトの画像を取得するには、dpi 拡張子に -land (横向き) および -port (縦向き) 拡張子を指定します。たとえば、drawable-mdpi-port と drawable-mdpi-land を使用できます。オプションの完全なリストと詳細情報については、複数画面のサポートに関するドキュメントを参照してください。

オプション 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;
}
于 2013-01-23T18:21:25.437 に答える