Android v31及以下版本ImageView纯XML圆角实现求助
解决方案:兼容低版本的ImageView纯XML圆角实现
你当前的问题是给ImageView设置了圆角shape背景,但图片本身没有被裁剪——背景的圆角不会自动作用于前景的图片内容。以下是两种纯XML实现方案,无需额外依赖,适配低版本Android:
方案一:FrameLayout包裹实现全版本兼容
这种方法通过外层FrameLayout的圆角背景+裁剪子View的特性,让ImageView的图片被裁成圆角,兼容所有Android版本:
修改你的布局文件,将原来的ImageView替换为以下结构:
<FrameLayout android:layout_width="match_parent" android:layout_height="match_parent" android:background="@drawable/image_background" android:clipChildren="true"> <ImageView android:id="@+id/scribb_view" android:layout_width="match_parent" android:layout_height="match_parent" android:scaleType="fitXY" android:contentDescription="@string/image" /> </FrameLayout>
android:clipChildren="true"会强制FrameLayout裁剪超出自身边界(即圆角区域)的子View内容,图片自然会显示为圆角。- 保留你已有的
image_background.xml圆角shape即可。
方案二:API 21+ 直接用clipToOutline(可选)
如果你的最低兼容版本是API 21及以上,可以不用额外布局,直接给ImageView添加两个属性:
<ImageView android:id="@+id/scribb_view" android:layout_width="match_parent" android:layout_height="match_parent" android:scaleType="fitXY" android:background="@drawable/image_background" android:outlineProvider="background" android:clipToOutline="true" android:contentDescription="@string/image" />
android:outlineProvider="background"让View的轮廓跟随背景的shapeandroid:clipToOutline="true"开启裁剪,将图片内容限制在轮廓内
额外布局优化提示
你当前的LinearLayout是horizontal方向,但里面的TextView和ImageView都设置了match_parent的宽高,这会导致两个控件重叠或布局异常。建议将外层LinearLayout改为FrameLayout,让TextView和ImageView重叠,默认显示TextView,有图片时隐藏TextView:
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_margin="9dp" android:background="@drawable/widget_background" android:padding="9dp" android:id="@+id/widget_container"> <TextView android:id="@+id/default_text" android:layout_width="match_parent" android:layout_height="match_parent" android:textSize="25sp" android:textStyle="bold" android:gravity="center" android:textColor="#E9E9E9" tools:text="Nothing yet!" /> <FrameLayout android:layout_width="match_parent" android:layout_height="match_parent" android:background="@drawable/image_background" android:clipChildren="true"> <ImageView android:id="@+id/scribb_view" android:layout_width="match_parent" android:layout_height="match_parent" android:scaleType="fitXY" android:contentDescription="@string/image" /> </FrameLayout> </FrameLayout>
内容的提问来源于stack exchange,提问作者Emir Sürmen
相关产品推荐
相关产品推荐

