Coins arrondis avec Picasso
Est-il un moyen raisonnable de faire des coins arrondis avec Picasso qui
- Ne pas ralentir le dessin
- Travaille avec des couches de matériel
- Ne crée pas un extra bitmap pour chaque image
- Permet le redimensionnement de la téléchargé bitmap sur la taille de la destination imageview
La plupart des picasso, des conseils sur les coins arrondis suggère qu'une transformation de l'être utilisé, mais je n'ai pas vu un exemple qui n'est pas de créer un supplément de bitmap dans le cadre de la transformation.
Ce qui semble être à cause de Picasso utilise uniquement des bitmaps, tandis que les astuces pour faire des coins arrondis utiliser le fait que vous pouvez dessiner dynamiquement les coins arrondis sur la façon raisonnablement efficace (la plupart des solutions utiliser quelque chose le long des lignes de http://www.curious-creature.org/2012/12/11/android-recipe-1-image-with-rounded-corners/).
De le faire avec Volley a été très orthodoxe, mais possible, en changeant juste le type de ImageView à quelque chose qui a pris une coutume drawable, qui a attiré des coins arrondis. Depuis Picasso besoins des bitmaps (au moins, il n'y a qu'une image bitmap -> bitmap transformation), c'est, depuis la conversion de la drawable bitmap crée une image bitmap dans le processus.
Une solution serait de faire le travail pour modifier picasso dans une branche sur mon propre qui a ajouté une image bitmap -> drawable transformer, mais j'imagine que il y a une meilleure façon d'aller à ce sujet.
Je ne veux pas tirer un 9-patch sur le dessus d'un point de vue à donner l'apparence de coins arrondis.
Avez-vous l'essentiel? gist.github.com/aprock/6213395 à la Ligne 28, clairement crée une nouvelle image, qui est ce que j'essaie d'éviter.
Je suis confus gars -- ne serait-il pas définir le .arrière-plan comme un Drawable qui a un angle arrondi de la frontière? (Je suis peut-être la confusion entre ce que vous pouvez faire dans iOS/Android ... :O )
OriginalL'auteur secureboot | 2014-03-12
Vous devez vous connecter pour publier un commentaire.
Ce code fonctionne très bien pour moi
//ici, c'est la classe pour faire
OriginalL'auteur
J'ai aussi besoin de quelque chose comme ça, mais avec une frontière. J'ai cherché sur internet et j'ai trouvé une version (sans coins arrondis) qui avait l'air bien, mais la frontière était sur l'image et je n'aime pas ça. J'ai donc fait ma propre version avec de la frontière en dehors de l'image.
En voici quelques exemples:
Frontière avec coins arrondis:
nouveau BitmapBorderTransformation(3, 15, Couleur.BLANC);
http://postimg.org/image/68fz5md39/
Coins arrondis sans frontière:
nouveau BitmapBorderTransformation(0, 15, Couleur.BLANC);
http://postimg.org/image/he4681rsv/
Vous pouvez aussi le faire frontière, sans coins arrondis:
nouveau BitmapBorderTransformation, Paragraphe 3, de la Couleur.BLANC);
OriginalL'auteur
cela fonctionne pour n'importe quelle image de n'importe quelle taille--
1) tout d'abord créer une image vide conteneur de différents résolution
2) puis de l'exécution obtenir la hauteur et la largeur par cette-------
3)
4) maintenant, la transformation de la classe----
OriginalL'auteur
EDIT: la réponse que je proposerais serait d'attendre pour Picasso 2.3, ou la fourche à leur github maintenant, où vous pouvez réellement obtenir à un BitmapDrawable.
Une approche que j'ai trouvé pour l'instant est que vous pouvez charger des images dans un objet Cible, créer un drawable de l'image bitmap de cette façon, puis définissez le drawable dans l'ImageView, où il va dessiner sans la création d'une nouvelle image.
Cette approche sorte de suce pour quelques raisons bien:
1), Vous avez à gérer des objets Cibles. Ces sont faibles-référencé (heureusement), donc vous devez garder une trace de vous-même. Ick. Les fuites de mémoire ahoy.
2) Quand vous obtenez la fonction de rappel, vous feriez mieux de vérifier l'état du monde est toujours d'actualité à l'image, qui fait partie de ce que vous voulez éviter à l'aide de picasso.
En bref, il y a quelques choses qui semblent empêcher une meilleure solution.
1) Picasso enveloppements bitmaps dans PicassoDrawables. Cela signifie que vous vous avez à gérer un drawable arbitraire dans votre personnalisé imageView (si vous choisissez cette voie), ou de cas particulier pour cette classe.
2) PicassoDrawable ne pas exposer l'image source, donc, vous devez convertir le drawable à une image bitmap (nécessite la création d'une nouvelle image, afaict).
3) Il n'y a pas de bitmap -> drawable fonction de transformation (voir #1 pour le pourquoi, le plus probable).
Aimerions savoir si il y a quelque chose qui me manque, ou quelqu'un a une meilleure solution. Aujourd'hui mon meilleur plan est de faire de la gestion de Cible proposée ci-dessus, ou la fourche à la picasso repo, changement PicassoDrawable avoir un accesseur public pour le sous-jacent bitmap, et de faire la conversion dans un personnalisé dessiné de cette façon dans mon imageView.
PicassoDrawable
étendreBitmapDrawable
. Il évite l'allocation supplémentaire et permettra de fournir de l'API que vous voulez.Il sera publié espérons que ce mois-ci 🙂
est-ce sorti?
OriginalL'auteur