当前位置: 首页 > 知识库问答 >
问题:

Android:如何将ImageView的内容调整到与另一个ImageView内容相同的尺寸?

岳玉书
2023-03-14

我正在尝试将ImageView的内容调整为与另一个ImageView的内容相同的尺寸。例如,假设我有以下两个图像,其中一个是水平定向的,另一个是垂直定向的:

垂直图像:

水平图像:

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <FrameLayout
        android:id="@+id/slider_screen_photo_layout"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        android:padding="5dip"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        tools:ignore="MissingConstraints">

        <ImageView
            android:id="@+id/slider_screen_image_1_box"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:adjustViewBounds="true"
            android:maxHeight="370dp"
            android:scaleType="fitStart"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent" />

        <ImageView
            android:id="@+id/slider_screen_image_2_box"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:adjustViewBounds="true"
            android:maxHeight="370dp"
            android:scaleType="matrix"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent" />
    </FrameLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
    ImageView sliderPreviewBox = null;

    if (photoNum == 1) {
        sliderPreviewBox = findViewById(R.id.slider_screen_image_1_box);
    }
    if (photoNum == 2) {
        sliderPreviewBox = findViewById(R.id.slider_screen_image_2_box);
    }

    Drawable drawable = sliderPreviewBox.getDrawable();
    int width = drawable.getIntrinsicWidth();
    int height = drawable.getIntrinsicHeight();

共有1个答案

卫宁
2023-03-14

试试看:

onCreate..

Bitmap bitmap = BitmapFactory.decodeFile(MyPath);
try {
    int rotation = getExifOrientation(MyPath);
    Log.d(TAG, "\n--- Rotation of the image " + name + " is: " + rotation);
} catch (IOException e) {
    e.printStackTrace();
}
Bitmap rot_bitmap = rotateBitmap(MyPath, bitmap);
imageView.setImageBitmap(rot_bitmap);

之后:


// To get the original orientation of the image
public static Bitmap rotateBitmap(String src, Bitmap bitmap) {
    try {
        // Getting the orientation of the image, there are 6 cases:
        // The Exif specification defines an Orientation Tag to indicate the orientation of the camera relative to the captured scene
        // Source: http://sylvana.net/jpegcrop/exif_orientation.html
        int rotation = getExifOrientation(src);
        if (rotation == 1) { return bitmap; }
        Matrix matrix = new Matrix();
        switch (rotation) {
            case 2: matrix.setScale(-1, 1); break;
            case 3: matrix.setRotate(180); break;
            case 4: matrix.setRotate(180); matrix.postScale(-1, 1); break;
            case 5: matrix.setRotate(90); matrix.postScale(-1, 1); break;
            case 6: matrix.setRotate(90); break;
            case 7: matrix.setRotate(-90); matrix.postScale(-1, 1); break;
            case 8: matrix.setRotate(-90); break;
            default: return bitmap;
        }
        // Creating a bitmap after its rotation and recycling the original one
        try {
            Bitmap oriented = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), matrix, true);
            // on low-memory system such as Android, must be attention to add bitmap.recycle(); to avoid the memory leak exception
            bitmap.recycle();
            return oriented;
        } catch (OutOfMemoryError e) {
            e.printStackTrace();
            return bitmap;
        }
    } catch (IOException e) {
        e.printStackTrace();
    }
    return bitmap;
}


// function to get the orientation of bitmap
private static int getExifOrientation(String src) throws IOException {
    int orientation = 1;
    ExifInterface exif = new ExifInterface(src);
    String orientationString=exif.getAttribute(ExifInterface.TAG_ORIENTATION);
    try { assert orientationString != null;
        orientation = Integer.parseInt(orientationString); }
    catch(NumberFormatException e) { e.printStackTrace(); }
        return orientation;
    }

 类似资料:
  • 问题内容: 我有一些数据结构,我想将其中一个用作临时结构,将另一个用作非临时结构。 现在的问题当然是实际上只是指向,因此一旦清除,也是如此。 如何在使用Java时保留值? 问题答案: 您可以使用以下技巧: 或使用 您可以在此处获取有关clone()方法的一些信息 但是您应该记住,所有这些方式都会给您 List 的副本,而不是其所有元素。因此,如果您更改复制的列表中的元素之一,则它也将在原始列表中进

  • 问题内容: 将整个目录内容复制到Java或groovy中的另一个目录的方法? 问题答案: 将整个目录复制到保存文件日期的新位置。此方法将指定的目录及其所有子目录和文件复制到指定的目的地。目标是目录的新位置和名称。 如果目标目录不存在,则会创建该目录。如果目标目录确实存在,则此方法将源与目标合并,并且源优先。 为此,这是示例代码

  • 我有一个框架,第一个元素是一个ImageView,它的高度和宽度与父级匹配,让id为a。第二个元素也是一个ImageView,它的高度和宽度与父级匹配,让id为B。第三个元素是一个视图,它的高度和宽度都是100 dp,可以移动到整个屏幕上,让id为C。我在背景C中使用透明色,所以在C中我们应该看到B,因为B在a上面。但我想在C中显示a,我怎么做?

  • 问题内容: 我的Java应用程序需要具有比较文件系统中两个不同文件并确定它们的二进制内容是否相同的能力。 这是我当前的代码: 任何有关如何正确进行比较功能的提示或建议,将不胜感激。 问题答案: 最简单的方法是将内容读取为两个字符串,例如 ,然后对这些执行。您是否需要更复杂的差分功能?

  • 问题内容: 我在做下面的运动。 创建一个包含四个元素的切片。 创建一个新切片,并将第三个和第四个元素仅复制到其中。 我已经返回了以下程序 我程序的输出是。但我希望newElements切片为[3 4]- 我的程序出了什么问题。 问题答案: 使用内置的复制功能将元素从一个切片复制到另一个切片。 在操场上跑 您可以使用append创建切片并在单个语句中复制元素,但是代码并不像使用copy那样明显。 在

  • 我有一个来自类型“Details”的sortedList,它包含以下内容: 现在,排序后的列表返回所有这些对象,但我想用相同的test0、test1、test2和test3、test4和test5(test3+test3、test4+test4和test5+test5): 我不确定是否是解决此问题的最佳选项。有什么想法吗?应该找到所有test0重复项的两个方法: