如何在水平放置的ConstraintLayout中嵌入一侧的ImageView中垂直居中放置图像?

时间:2019-01-08 18:04:43

标签: android imageview android-constraintlayout

我有一个程序,该程序的一个片段使用ConstraintLayout,它水平放置(横向位置),并且ImageView位于屏幕的左侧。 ImageView的位置和比例正确。

图像视图必须处理各种尺寸的照片。我希望所有照片都在图像视图中居中。但是,使用

  

android:scaleType =“ centerInside”或android:scaletype =“ fitCenter”

导致照片的顶部边缘沿着ImageView的水平中心线定位,而不是照片的水平中心线与ImageView的水平中心线对齐。

我尝试了“比例类型”和“布局重力”,“重力”的每种组合,得出的结论是,当将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的高度,我需要将图像在Image视图中垂直居中,如果图像的宽度不如ImageView宽,则需要在ImageView中水平居中。 ImageView尺寸应固定。

感谢所有建议!

0 个答案:

没有答案