Java 将ImageView中的图像缩放到高度,将纵横比保持在屏幕边界之外,并向右对齐
我有一个图像,我想匹配屏幕的高度,延伸超过屏幕的左边缘,将图像的右侧与屏幕的右侧对齐 XML解决方案更好,但Java解决方案也可以 我该怎么做?Java 将ImageView中的图像缩放到高度,将纵横比保持在屏幕边界之外,并向右对齐,java,android,xml,android-layout,Java,Android,Xml,Android Layout,我有一个图像,我想匹配屏幕的高度,延伸超过屏幕的左边缘,将图像的右侧与屏幕的右侧对齐 XML解决方案更好,但Java解决方案也可以 我该怎么做? 您需要使用矩阵缩放并自行设置矩阵。这并不难 您必须在布局视图后执行此操作,以便获得图像视图的尺寸。您还需要设置的可绘制或位图的尺寸 首先,您必须计算出图像的缩放(倍增)程度,以便高度与ImageView的高度相同。为此,只需将ImageView高度除以图像高度即可 现在您也知道了图像的宽度。要使图像的右边缘与ImageView对齐,需要将图像向左移动
您需要使用矩阵缩放并自行设置矩阵。这并不难 您必须在布局视图后执行此操作,以便获得
图像视图的尺寸。您还需要设置的可绘制
或位图的尺寸
- 首先,您必须计算出图像的缩放(倍增)程度,以便高度与
ImageView
的高度相同。为此,只需将ImageView
高度除以图像高度即可
- 现在您也知道了图像的宽度。要使图像的右边缘与
ImageView
对齐,需要将图像向左移动(平移)其宽度,然后将其移回ImageView
的宽度。因此,转换只是图像宽度和ImageView
宽度的差异
我是这样做的:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final ImageView imageView = (ImageView) findViewById(R.id.imageview);
imageView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
BitmapDrawable drawable = null;
if (Build.VERSION.SDK_INT >= 21) {
drawable = (BitmapDrawable) getResources().getDrawable(R.drawable.sunset, getTheme());
} else {
drawable = (BitmapDrawable) getResources().getDrawable(R.drawable.sunset);
}
Bitmap bitmap = drawable.getBitmap();
// get the scale factor that will have to be applied to
// the image to make it the same height as your ImageView
float factor = (float) imageView.getHeight() / (float) bitmap.getHeight();
// now the image will have to be shifted over all of its
// width minus the width of the ImageView. This will make
// the right edges line up.
int scaledImageWidth = (int) (bitmap.getWidth() * factor);
int translateX = imageView.getWidth() - scaledImageWidth;
// you can also use drawable.getIntrinsicWidth() and
// drawable.getIntrinsicHeight()
Matrix matrix = new Matrix();
matrix.setScale(factor, factor);
matrix.postTranslate(translateX, 0);
imageView.setScaleType(ImageView.ScaleType.MATRIX);
imageView.setImageMatrix(matrix);
imageView.setImageBitmap(bitmap);
}
});
}
您需要使用矩阵缩放并自行设置矩阵。这并不难
您必须在布局视图后执行此操作,以便获得图像视图的尺寸。您还需要设置的可绘制
或位图的尺寸
- 首先,您必须计算出图像的缩放(倍增)程度,以便高度与
ImageView
的高度相同。为此,只需将ImageView
高度除以图像高度即可
- 现在您也知道了图像的宽度。要使图像的右边缘与
ImageView
对齐,需要将图像向左移动(平移)其宽度,然后将其移回ImageView
的宽度。因此,转换只是图像宽度和ImageView
宽度的差异
我是这样做的:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final ImageView imageView = (ImageView) findViewById(R.id.imageview);
imageView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
BitmapDrawable drawable = null;
if (Build.VERSION.SDK_INT >= 21) {
drawable = (BitmapDrawable) getResources().getDrawable(R.drawable.sunset, getTheme());
} else {
drawable = (BitmapDrawable) getResources().getDrawable(R.drawable.sunset);
}
Bitmap bitmap = drawable.getBitmap();
// get the scale factor that will have to be applied to
// the image to make it the same height as your ImageView
float factor = (float) imageView.getHeight() / (float) bitmap.getHeight();
// now the image will have to be shifted over all of its
// width minus the width of the ImageView. This will make
// the right edges line up.
int scaledImageWidth = (int) (bitmap.getWidth() * factor);
int translateX = imageView.getWidth() - scaledImageWidth;
// you can also use drawable.getIntrinsicWidth() and
// drawable.getIntrinsicHeight()
Matrix matrix = new Matrix();
matrix.setScale(factor, factor);
matrix.postTranslate(translateX, 0);
imageView.setScaleType(ImageView.ScaleType.MATRIX);
imageView.setImageMatrix(matrix);
imageView.setImageBitmap(bitmap);
}
});
}