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)

谁能帮忙??

4

2 回答 2

4

由于PercentFrameLayoutPercentRelativeLayout在 API 级别 26.0.0 中已弃用,我建议您考虑使用 ofConstraintLayout来为您的ImageView. ConstraintLayout是为 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 文件:

布局编辑器

于 2017-08-22T16:16:12.910 回答
1

You can use Percent Relative Layout

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.

Then it will set 16:9 aspect ratio.

于 2016-03-30T11:22:36.253 回答