3

У меня есть изображение для отображения изображения, и я хочу чтобы включить возможность обрезать изображение, используя следующее соотношение: 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)

может кто-нибудь помочь?

ответ

1

Вы можете использовать проценты по сравнению раскладке

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 соотношения сторон.

1

С PercentFrameLayout и PercentRelativeLayout были устаревшими в уровне API 26.0.0, я предлагаю вам рассмотреть использование ConstraintLayout сохранить соотношение 16: 9 для ImageView. ConstraintLayout - действительно мощный инструмент для создания адаптивного интерфейса для платформы Android, вы можете найти более подробную информацию здесь 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 отредактируйте свой макет непосредственно в редакторе макета:

Layout Editor

 Смежные вопросы

  • Нет связанных вопросов^_^