Изображение не отображается, когда оно находится в Cardvew

#android #imageview #cardview

#Android #просмотр изображения #Просмотр карты

Вопрос:

Ниже приведен мой код:

 <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, и изображение, наконец, отобразилось.

Кто-нибудь знает, как исправить эту проблему?

Я также пытался:

  1. src и srcCompat и фон ImageView
  2. Измените оба androidx.cardview.widget.Просмотр карты на com.google.android.material.card.MaterialCardView
  3. Удалите один CardView

Комментарии:

1. app:cardCornerRadius="250dp" укажите соответствующий радиус, например: 20dp, 30dp

2. @chandmohd я хочу сделать вид карты в виде круга,

3. @chandmohd оказывается, это действительно проблема, о которой вы упомянули! Большое спасибо: D

Ответ №1:

Попробуйте удалить радиус из внутреннего вида карты и / или оба. если вы видите изображение, вам нужно уменьшить радиус или увеличить размер карты.

ImageView не отображается, потому что у вас слишком большой радиус в обоих видах вашей карты, а виды карты, вероятно, недостаточно велики, поэтому radius перекрывает ваше изображение.

Ответ №2:

Поместите макет в представление вашей карты и сделайте представление изображения дочерним элементом:

 <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>
  

Ответ №3:

Если вы хотите отобразить изображение в форме круга

Библиотека Material Design предоставляет ShapeableImageView возможность создавать любую форму, которую вы хотите, без какой-либо пользовательской формы

пример:

 <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.xml:

  <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>
  

Зависимости:

 implementation 'com.google.android.material:material:1.3.0-alpha01'