0

以下の結果の正しいスケーリング方法を考え出す必要があります。

ImageView は次のようにスケーリングする必要があります。

  • X 軸を埋める
  • アスペクト比を維持
  • ImageView を 0,0 に配置
  • 残りを下部でトリミングします。

私は多くのMatrixタイプを試しましたが、これまでのところ結果を得ることができませんでした.

4

1 に答える 1

0

私は同じ問題を抱えています。私の解決策は次のとおりです。

    ImageView imageView = (ImageView) findViewById(R.id.imageView);
    Matrix matrix = new Matrix();

    float imageWidth = image_original_width * display.density, imageHeight = image_original_height * display.density;
    float placeWidth = imageView.getWidth(), placeHeight = imageView.getHeight();
    float scaleToWidth = placeWidth / imageWidth;
    float scaledImageHeight = imageHeight * scaleToWidth;

    matrix.setScale(scaleToWidth, scaleToWidth);
    if (placeHeight > scaledImageHeight) {
        // there is maintain place bottom of image: center to vertical
        matrix.postTranslate(0, (placeHeight - scaledImageHeight) / 2);
    } else {
        // the bottom of image is already cropped
    }

    imageView.setImageMatrix(matrix);

imageView.getWidth() は OnCreate メソッドで正しい値を取得しないため、ViewTreeObserver または正確なサイズを使用する必要があります。

于 2013-04-15T08:51:33.150 に答える