Угловой радиус CardView ведет себя странно в Google Maps InfoWindow

Похоже, что один и тот же код макета XML работает по-разному в InfoWindow и «обычной» активности/фрагменте.

Я настраиваю свое информационное окно Google Maps. Я уже применил к нему закругленные углы (я использую getInfoWindow()), и теперь я хотел бы, чтобы ImageView также имел закругленные углы. Когда InfoWindow открывается, он выглядит так: Broken InfoWindowМне это показалось странным, поэтому я вставил код CardView и ImageView ( после упоминания) к деятельности. Вот как это выглядело (не смотрите на содержимое, оно загружается во время выполнения) Fine InfoWindow

Мой код

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:padding="8dp"
    android:background="@drawable/rounded_corners_bg">

    <androidx.cardview.widget.CardView
        android:id="@+id/container"
        android:layout_width="240dp"
        android:layout_height="160dp"
        android:elevation="0dp"
        android:background="@android:color/black"
        app:cardCornerRadius="32dp"
        android:layout_marginStart="8dp"
        android:layout_marginTop="8dp"
        android:layout_marginEnd="8dp"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:cardElevation="0dp"
        app:contentPadding="0dp">

        <ImageView
            android:id="@+id/imageInfoWindow"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:scaleType="centerCrop"
            app:srcCompat="@drawable/opactwo_2" />


    </androidx.cardview.widget.CardView>

    <TextView <!-- Doesn't matter -->

    <TextView <!-- Doesn't matter -->

    <TextView <!-- Doesn't matter -->
</androidx.constraintlayout.widget.ConstraintLayout>

Я обнаружил, что один и тот же код дает разные результаты. Мой вопрос, почему это не работает и что я должен сделать, чтобы заставить его работать? Я не применяю темы и не изменяю представления во время выполнения.


person Bartek Pacia    schedule 13.02.2019    source источник
comment
Я не знаю полного ответа на ваш вопрос, но часть информации, которая может помочь вам решить эту проблему, заключается в том, что Google Maps InfoWindows не являются обычными живыми представлениями Android, это растровые изображения! Возможно, любой процесс, преобразующий представление в растровое изображение, странно взаимодействует с CardView.   -  person Ben P.    schedule 13.02.2019
comment
См. раздел синих заметок внутри developers.google.com/maps/documentation/ android-sdk/ для получения дополнительной информации.   -  person Ben P.    schedule 13.02.2019
comment
Я знаю об этом @BenP. Я использовал Picasso, но столкнулся с этой проблемой stackoverflow.com/questions/39551774/. Поэтому решил загрузить программно с помощью imageView.setImageResource(), это эквивалентно жесткому кодированию приложения: srcCompat   -  person Bartek Pacia    schedule 14.02.2019
comment
Я хочу сказать, что поведение CardView с закругленными углами не очень распространено на платформе (и даже не работает вообще до Lollipop), поэтому, возможно, процесс, который преобразует представление в растровое изображение, происходит до CardView может выполнить отсечение его углов.   -  person Ben P.    schedule 14.02.2019
comment
Мой минимум - API 21, поэтому я не забочусь об этом. Но ваша версия кажется довольно хорошей. Я уверен, что должен быть какой-то обходной путь   -  person Bartek Pacia    schedule 14.02.2019


Ответы (1)


поэтому я поставил https://github.com/rishabh876/RoundedImageView вместо imageView и использую Glide для загрузки изображений

                    @Override
                    public boolean onResourceReady(GlideDrawable resource, String model, Target<GlideDrawable> target, boolean isFromMemoryCache, boolean isFirstResource) {

                        if (!isFromMemoryCache) {
                            marker.showInfoWindow();
                        }
                        return false;
                    }
                })
                .into(viewHolder.imageView);
person Doniyor Rakhmanov    schedule 27.05.2021