我有一个程序,该程序的一个片段使用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尺寸应固定。
感谢所有建议!