我正在尝试使用可以同时保存横向或纵向图像的ImageView。 这些图像应该适合图像视图的宽度(如果是横向)或高度(如果是肖像),但无论如何它们必须与视图的顶部对齐,没有边距或填充。
我希望实现的目标类似于android:scaleType="fitStart"
,但在纵向图像的情况下居中或在横向图像的情况下与顶部对齐。
补充:
现在我正在使用这样一个丑陋的代码,这似乎有用,但不确定它是最好的解决方案:
<com.custom.layout.MyImageView
android:id="@+id/detail_view_image"
android:src="@drawable/logo"
android:background="#fff"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_centerHorizontal="true"
android:cropToPadding="false"
android:adjustViewBounds="false"
/>
然后在我的课堂上,我扩展了ImageView:
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
int imgWidth = getDrawable().getIntrinsicWidth();
int imgHeight = getDrawable().getIntrinsicHeight();
if(imgWidth>imgHeight)
setScaleType(ScaleType.FIT_START);
else
setScaleType(ScaleType.FIT_CENTER);
int width = measureWidth(widthMeasureSpec);
int height = measureHeight(heightMeasureSpec);
setMeasuredDimension(width, height);
}
答案 0 :(得分:2)
您可以在onCreate()方法中放置一个片段,而不是覆盖原生视图,该片段会根据手机的方向更改ImageView的scaleType。
一些示例代码段(我不确定它是否就像那样,但是为了得到这个想法), in onCreate方法:
ImageView imgView = findViewById(R.id.myImage);
//portrairt orientation
if(getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) {
imgView.setScaleType(ScaleType.FIT_CENTER);
} else { //landscape orientation
imgView.setScaleType(ScaleType.FIT_START);
}
因此,当方向发生变化时,将再次调用onCreate并更改视图的缩放类型,如果要覆盖onConfigurationChanged(),则应在任何位置再次添加上述代码段。 尝试一下,让我知道它是否有效