3
votes

Comment définir l'URL de l'image comme arrière-plan d'un ImageView à l'aide de la liaison de données?

Je dispose déjà d'un adaptateur de liaison pour charger l'image dans ImageView en provenance de l'URL. Maintenant, je dois charger l'URL de l'image d'arrière-plan comme arrière-plan de la vue d'image et j'utilise la liaison de données, glide pour charger des images et l'écrire dans Kotlin.

Comment puis-je écrire un adaptateur de liaison pour le même?

Voici mon XML

<androidx.appcompat.widget.AppCompatImageView

        android:id="@+id/ImageView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:adjustViewBounds="true"
        android:scaleType="centerInside"
        app:backgroundImageUrl="@{item.backgroundImageUrl}"
        app:mainImageUrl="@{item.mainImageUrl}"/>


10 commentaires

Faites simplement une méthode pour prendre l'url et l'imageview comme paramètre et appelez cette méthode.


Voici Image de liaison à l'aide de bindAdapter est l'exemple pour la même chose, au lieu de Picasso, utilisez glide pour votre travail


@AbhayKoradiya J'ai déjà une méthode pour charger une image en vue d'image. Si je fais la même chose pour l'image d'arrière-plan, aucune image d'arrière-plan n'apparaît


Vérifiez la réponse de @PJain.


Voici l'adaptateur de liaison que j'ai utilisé pour charger l'image provenant de l'url vers la vue d'image @BindingAdapter ("ImageUrl") fun loadImage (vue: ImageView, imageUrl: String?) {Glide.with (view.context) .load (imageUrl ) .into (vue)}


Maintenant, je dois charger l'URL de l'image d'arrière-plan en arrière-plan et lorsque j'utilise un adaptateur de liaison similaire, l'image d'arrière-plan ne se charge pas. Je ne suis pas sûr, mais je suppose qu'il y a une différence car l'image est Android: src et l'arrière-plan est Android: background .. quelqu'un peut-il m'aider?


qu'utilisez-vous dans imageView?


Vous pouvez faire une astuce pour utiliser une autre imageView comme arrière-plan de votre imageView actuelle. Et chargez l'image à partir de l'URL en tant que fonctionnalité de chargement d'image actuelle. De cette façon, une autre imageView sera créée mais c'est une solution simple.


Pouvez-vous me montrer comment faire ça?


@humbleDev veuillez vérifier ma réponse ci-dessous.


3 Réponses :


0
votes

Vous pouvez essayer ce qui suit

    try {
        ImageView i = (ImageView)findViewById(R.id.image);
        Bitmap bitmap = BitmapFactory.decodeStream((InputStream)new URL(imageUrl).getContent());
        i.setImageBitmap(bitmap);
    } catch (MalformedURLException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }


1 commentaires

Pouvez-vous m'aider à utiliser Glide, puis à le convertir en bitmap?



0
votes

Essayez ce XML:

<android.support.constraint.ConstraintLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <ImageView
        android:id="@+id/image_view_background"
        android:layout_width="250dp"
        android:layout_height="250dp"
        android:background="@color/colorPrimary"
        android:alpha="0.4"
        app:mainImageUrl="@{item.backgroundImageUrl}"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintBottom_toBottomOf="parent"/>

    <ImageView
        android:id="@+id/image_view_main"
        android:layout_width="230dp"
        android:layout_height="230dp"
        app:mainImageUrl="@{item.mainImageUrl}"
        android:background="@color/colorPrimaryDark"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintBottom_toBottomOf="parent"/>

</android.support.constraint.ConstraintLayout>

À des fins de vérification, je viens de définir l'alpha pour l'image d'arrière-plan.

J'espère que cette astuce vous aidera.


4 commentaires

J'ai aimé l'idée mais cela n'a toujours pas fonctionné pour moi. Savez-vous comment je peux convertir des images chargées de glide en bitmap dans l'adaptateur de liaison? Cela fonctionnera je suppose


Pourquoi avez-vous besoin d'obtenir l'image bitmap?


La solution que vous avez mentionnée affecte les performances de mise en page car nous créons une vue d'image distincte uniquement pour définir l'image d'arrière-plan. La plupart des solutions que j'ai vues convertissaient les images chargées par glide en un objet bitmap pour définir l'arrière-plan. Je ne sais pas comment écrire le code correspondant


Fondamentalement, les choses bitmap fonctionnent pour télécharger l'image à partir de l'URL par diffusion de données. Et puis définissez ce bitmap sur la vue image. C'est ça.



1
votes

J'ai utilisé l'adaptateur de liaison suivant et il fonctionne correctement.

@BindingAdapter("backgroundImageUrl")
 fun loadBackgroundImage(view: ImageView, imageUrl:String?)
{
Glide.with(view.context).load(imageUrl).into(object:SimpleTarget<Drawable>()
{
override fun onResourceReady(resource: Drawable, transition: Transition<in 
Drawable>?) 
{
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN)
{
 view.background = resource}
 }
 })
 }


0 commentaires