2

こんにちは、画像をロードするアプリケーションに取り組んでおり、各画像を可能な限り最大のサイズに拡大しようとしています。たとえば、画像が横向きの画像の場合 (幅が高さよりも大きい場合)、電話の幅を埋めるための幅と、縦横比を維持するための高さのスケーリング。高さが幅よりも大きい場合、つまり縦長の画像の場合、電話の高さに合わせて画像を拡大縮小し、縦横比を維持するために幅を調整する必要があります。これを機能させるのに少し苦労しました。これまでのところ、どんな助けも大歓迎です。

            final ImageView i = new ImageView(mContext);
            i.setImageResource(mImageIds[position]);
            i.setBackgroundResource(android.R.color.black);
            //TODO need to get actual size of drawable not view size which is 0
            ViewTreeObserver vto = i.getViewTreeObserver();
            vto.addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {
                public boolean onPreDraw() {
                    int w = i.getMeasuredWidth();
                    int h = i.getMeasuredHeight();
                    Display display = getWindowManager().getDefaultDisplay(); 
                    int width = display.getWidth();
                    int height = display.getHeight();
                    if(w <= h){
                        //TODO need to think about landscape
                        h = height - convertDpToPixel(50, context);
                        w = w*(width);
                    }else{
                        h = h*(height);
                        w = width;
                    }
                    //TODO set imageview to w and h

                    return true;
                }
            });
4

2 に答える 2

1

すでに大きい方に応じて、高さまたは幅のいずれかを最大まで増やします。

ここで、横向きの画像を扱っているとしましょう:

すでに幅を最大サイズ、ディスプレイの幅に拡張しています

拡大した側が画像の幅なので、表示幅 = 幅、画像の幅 = w と仮定します。

幅 / w = r

したがって、r は表示幅と画像幅の比率になります。これを使用して、身長を伸ばす必要があります。

高さに比率を掛けて、画像の新しい高さを結果の数値に設定するだけです。

ポートレイト画像にたどり着けば…まあ、わかると思います。それはほとんど同じことです。

あとは、画像を画面中央に配置するだけでいいと思います。

于 2012-05-27T07:48:22.647 に答える
1

for get 表示幅、高さ

DisplayMetrics displaymetrics = new DisplayMetrics();
    getWindowManager().getDefaultDisplay().getMetrics(displaymetrics);
    int height = displaymetrics.heightPixels;
    int wwidth = displaymetrics.widthPixels;

イメージビューのサイズ変更用

ImageView img=(ImageView)findViewById(R.id.ImageView01);
Bitmap bmp=BitmapFactory.decodeResource(getResources(), R.drawable.sc01);
Bitmap resizedbitmap=Bitmap.createScaledBitmap(bmp, width, height, true);
img.setImageBitmap(resizedbitmap);
于 2012-05-27T08:26:36.187 に答える