Как центрировать изображение по вертикали в ImageView, встроенном в одну сторону в горизонтально ориентированном ConstraintLayout? - PullRequest
0 голосов
/ 08 января 2019

У меня есть программа с фрагментом, который использует ConstraintLayout, ориентированный по горизонтали (альбомная позиция), с ImageView, расположенным в левой части экрана. ImageView расположен и пропорции правильно.

При просмотре изображений необходимо обрабатывать фотографии разных размеров. Я хочу, чтобы все фотографии были в центре изображения. Однако, используя

android: scaleType = "centerInside" или android: scaletype = "fitCenter"

приводит к тому, что фотография располагается с верхним краем вдоль горизонтальной центральной линии ImageView, а не с горизонтальной центральной линией фотографии, выровненной по горизонтальной центральной линии ImageView.

Я перепробовал каждую комбинацию "Scaletypes" и "layout-gravity", "gravity", и я пришел к выводу, что это может быть ошибкой в ​​виджете ImageView, когда он помещен в ConstraintLayout.

Я использую Android Studio V3.2, предпочитая кодировать в xml, а не использовать визуальный редактор.

.XML:

<android.support.constraint.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:id="@+id/photonote_carousel_fragment_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:focusableInTouchMode="true"
>

<android.support.v7.widget.AppCompatImageView
    android:id="@+id/photonote_carousel_fragment_photo_imageview"
    android:layout_width="0dp"
    android:layout_height="0dp"
    android:background="@color/Black"
    android:scaleType="centerInside"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintEnd_toEndOf="@id/barrier4"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent" />

<android.support.constraint.Barrier
    android:id="@+id/barrier4"
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    app:barrierDirection="left" .....

Java-программа:

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
    View v = inflater.inflate(R.layout.photonote_carousel_fragment_layout, container, false) ;
    mView = v ;
    setHasOptionsMenu(true);

    ...

    // reduce size of image so you see more note
    DisplayMetrics displayMetrics = new DisplayMetrics();
    getActivity().getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);

   mDisplayHeight = displayMetrics.heightPixels;
   mDisplayWidth = displayMetrics.widthPixels;



    // fiddle with the relative size of the Image
    ConstraintLayout.LayoutParams parms  ;

    int orientation = this.getResources().getConfiguration().orientation;
    if (orientation == Configuration.ORIENTATION_PORTRAIT)
    {
        // code for portrait mode
        mImageViewHeight = Math.round(mDisplayHeight /2) ;
        mImageViewWidth = mDisplayWidth ;
         parms = new ConstraintLayout.LayoutParams(mImageViewWidth ,mImageViewHeight);
    }
    else
        {
            mImageViewWidth = Math.round(mDisplayWidth /3) ;
            mImageViewHeight = mDisplayHeight ;
             parms = new ConstraintLayout.LayoutParams (mImageViewWidth,mImageViewHeight);
        }

  mPhotoView.setLayoutParams(parms); // to set 33 or 50%

Мне нужно, чтобы изображение было отцентрировано по вертикали в представлении «Изображение», если высота изображения меньше высоты ImageView, и по центру по горизонтали в «ImageView», если изображение не такое широкое, как ImageView. Размеры ImageView должны быть фиксированными.

Все предложения с благодарностью приняты!

...