У меня есть программа с фрагментом, который использует 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 должны быть фиксированными.
Все предложения с благодарностью приняты!