问题描述
下面是我的代码:
<androidx.cardview.widget.CardView
android:id="@+id/cv_back"
android:layout_width="@dimen/walletFuncFrameSize"
android:layout_height="@dimen/walletFuncFrameSize"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toStartOf="parent"
android:layout_marginTop="24dp"
android:layout_marginStart="24dp"
app:cardCornerRadius="250dp">
<androidx.cardview.widget.CardView
android:layout_width="@dimen/walletFuncSize"
android:layout_height="@dimen/walletFuncSize"
app:cardCornerRadius="250dp"
android:layout_gravity="center">
<ImageView
android:layout_width="@dimen/walletFuncImageSize"
android:layout_height="@dimen/walletFuncImageSize"
android:background="@drawable/back"
android:scaleType="centerCrop"
android:layout_gravity="center" />
</androidx.cardview.widget.CardView>
</androidx.cardview.widget.CardView>
当我使用Android 10手机进行测试时,它可以正常工作,没有问题。但是,当我使用Android 8.0手机进行测试时,该图像不会显示。
我试图删除所有cardview,但仅保留imageView,最终显示了图片。
有人知道如何解决此问题吗?
我也尝试过:
- src和srcCompat以及ImageView的背景
- 将androidx.cardview.widget.CardView都更改为com.google.android.material.card.MaterialCardView
- 删除一个CardView
解决方法
在名片视图中放置一个布局,并使图像视图成为其子视图:
<androidx.cardview.widget.CardView
android:id="@+id/cv_back"
android:layout_width="@dimen/walletFuncFrameSize"
android:layout_height="@dimen/walletFuncFrameSize"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toStartOf="parent"
android:layout_marginTop="24dp"
android:layout_marginStart="24dp"
app:cardCornerRadius="250dp">
<LinearLayout
android:layout_width="@dimen/walletFuncSize"
android:layout_height="@dimen/walletFuncSize"
android:background="@drawable/oval"
android:orientation=vertical
android:layout_gravity="center">
<ImageView
android:layout_width="@dimen/walletFuncImageSize"
android:layout_height="@dimen/walletFuncImageSize"
android:background="@drawable/back"
android:scaleType="centerCrop"
android:layout_gravity="center" />
</LinearLayout>
</androidx.cardview.widget.CardView>
@ drawable / oval:
<shape android:shape="oval" xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="@color/colorPrimary" />
</shape>
,
尝试从内部卡片视图和/或两者中删除半径。 如果您看到图像,则需要减小半径或增大卡片视图的大小。
未显示ImageView,因为两个卡片视图中的半径都太大,并且卡片视图可能不够大,因此半径与图像重叠。
,如果要以圆形显示图像
Material Design lib提供import clka
print(dir(clka))
来创建任何您想要的形状,而无需任何自定义形状
例如:
ShapeableImageView
在 style.xml 中定义样式:
<com.google.android.material.imageview.ShapeableImageView
android:id="@+id/ivSchoolIcon"
android:layout_width="56dp"
android:layout_height="56dp"
android:adjustViewBounds="true"
android:padding="2dp"
android:scaleType="centerCrop"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:shapeAppearanceOverlay="@style/circleImageView"
app:srcCompat="@drawable/ic_kid_placeholder" />
依赖项:
<style name="circleImageView" parent="">
<item name="cornerFamily">rounded</item>
<item name="cornerSize">50%</item>
<item name="android:shadowRadius">100</item>
<item name="android:shadowColor">@color/gray</item>
<item name="backgroundOverlayColorAlpha">12</item>
</style>