如何根据设备屏幕尺寸将百分比相对布局中的图像视图设置为以下比例,16:9,1:1,3:2,2:1,4:3

How to set imageview in Percent Relative Layout to following ratio's based on device screen size ,16:9,1:1,3:2,2:1,4:3

我有一个图像视图来显示图像,我想启用使用以下比例裁剪图像的选项 16:9,1:1,3:2,2:1,4:3 。我为每个按钮都有一些按钮,因此用户可以通过单击按钮将图像裁剪为以下图像。如何根据具有不同屏幕尺寸的设备执行此操作。

我使用以下代码片段获取了设备屏幕的高度和宽度

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

我可以使用此代码段将宽度和高度设置为 imageview

  FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(FrameLayout.LayoutParams.WRAP_CONTENT, FrameLayout.LayoutParams.WRAP_CONTENT);
            params.height=height;
            params.width=width;
            touchImageView.setLayoutParams(params);

但是如何使用相对百分比布局 (16:9,1:1,3:2,2:1,4:3)

有人能帮忙吗??

您可以使用相对百分比布局

http://developer.android.com/reference/android/support/percent/PercentRelativeLayout.html

private void changeAspectRatio(int width, int height, Float ratio, PercentRelativeLayout mPercentRelativeLayout) {
    PercentRelativeLayout.LayoutParams layoutParamsMain = new PercentRelativeLayout.LayoutParams(getApplicationContext(), null);
    if (width != 0)
        layoutParamsMain.width = width;
    if (height != 0)
        layoutParamsMain.width = width;
    PercentLayoutHelper.PercentLayoutInfo info1 = layoutParamsMain.getPercentLayoutInfo();
    if (ratio != 0f)
        info1.aspectRatio = ratio;
    mPercentRelativeLayout.setLayoutParams(layoutParamsMain);
    mPercentRelativeLayout.requestLayout();
}


changeAspectRatio((int)(width*.9), 0, 1.77f, mPercentRelativeLayout);

to get 16:9 , 16/9 = 1.77 and pass this value like above function call.

然后它将设置 16:9 纵横比。

由于 PercentFrameLayoutPercentRelativeLayout 在 API 级别 26.0.0 中被弃用,我建议您考虑使用 ConstraintLayout 来保持比率 16:9 为您 ImageViewConstraintLayout 是为 Android 平台构建响应式 UI 的强大工具,您可以在此处找到更多详细信息 Build a Responsive UI with ConstraintLayout.

下面是如何将 ImageView 构建到 ConstraintLayout 中以保持 16:9 比率的示例:

<android.support.constraint.ConstraintLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <ImageView
        android:id="@+id/imageView"
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:layout_marginEnd="0dp"
        android:layout_marginStart="0dp"
        android:layout_marginTop="0dp"
        app:srcCompat="@mipmap/ic_launcher"
        app:layout_constraintDimensionRatio="H,16:9"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

</android.support.constraint.ConstraintLayout>

不要忘记将 constraint-layout 依赖项添加到模块的 build.gradle 文件

implementation "com.android.support.constraint:constraint-layout:1.0.2"

或者不编辑 XML 文件,直接在布局编辑器中编辑布局: