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}"/>
3 Réponses :
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();
}
Pouvez-vous m'aider à utiliser Glide, puis à le convertir en bitmap?
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.
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.
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}
}
})
}
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.