3

プログラムで ImageView 要素を水平線形レイアウトに追加しています。次に、ImageView リソースの 1 つで、scaleX および scaleY プロパティを「2」に設定します。画像は適切にスケーリングされますが、他の ImageView 要素が重なるのではなく、移動しません。画像が他の画像と重なるのが好きではありません。どうすれば修正できますか?これが私のコードです:

    int resources[] = {R.drawable.desert, R.drawable.koala, R.drawable.jellyfish,
                       R.drawable.lighthouse, R.drawable.desert};

    for(int i=0; i<5; i++) {
        ImageView logo = new ImageView(this);
        logo.setLayoutParams(new LinearLayout.LayoutParams(100, 75));
        logo.setImageResource(resources[i]);
        logosContainer.addView(logo);
    }

    ImageView middleImage = (ImageView) logosContainer.getChildAt(2);
    middleImage.setScaleX(middleImage.getScaleX() * 2);
    middleImage.setScaleY(middleImage.getScaleY() * 2);

コードの結果は次のようになります: http://imageshack.us/a/img15/2811/scaleal.jpg

拡大縮小された画像が他の画像と重なっていることがはっきりとわかります。

4

1 に答える 1

0

ループを離れると、ImageViewはすでに測定され、コンテナに配置されています。この作業を行うには、レイアウトを更新する必要があります。これは注意が必要で、「すべてのビューを削除して再度追加する」ことにつながることがよくあります。では、ループで「スケーリング」を実行してみませんか?

for(int i=0; i<5; i++) {
   ImageView logo = new ImageView(this);
   if(i==middleImageIndex){
      logo.setLayoutParams(new LinearLayout.LayoutParams(100*2, 75*2,1));
   } else {
      logo.setLayoutParams(new LinearLayout.LayoutParams(100, 75,1));
   }
   logo.setImageResource(resources[i]);
   logosContainer.addView(logo);
}

最後のパラメーター(100,75、1 )はビューの重みです。これにより、各ImageViewが等しく重要であり、重複しないようになります

別の注意:setScaleにはAPIレベル11以上が必要です。これにより、多くのユーザーが削減される可能性があります

于 2012-10-03T20:58:48.313 に答える