Comment ajouter une ombre et une bordure circulaire imageView android?
J'ai créé un CircularImageView avec cette question: Créer circulaire d'affichage de l'image dans android
Télécharger le projet sur GitHub
1) C'est le CircularImageView classe :
public class CircularImageView extends ImageView {
public CircularImageView(Context context) {
super(context);
}
public CircularImageView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public CircularImageView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
@Override
protected void onDraw(Canvas canvas) {
Drawable drawable = getDrawable();
if (drawable == null) {
return;
}
if (getWidth() == 0 || getHeight() == 0) {
return;
}
Bitmap b = ((BitmapDrawable)drawable).getBitmap() ;
Bitmap bitmap = b.copy(Bitmap.Config.ARGB_8888, true);
Bitmap roundBitmap = getCroppedBitmap(bitmap, getWidth());
canvas.drawBitmap(roundBitmap, 0, 0, null);
}
public static Bitmap getCroppedBitmap(Bitmap bmp, int radius) {
Bitmap sbmp;
if(bmp.getWidth() != radius || bmp.getHeight() != radius)
sbmp = Bitmap.createScaledBitmap(bmp, radius, radius, false);
else
sbmp = bmp;
Bitmap output = Bitmap.createBitmap(sbmp.getWidth(), sbmp.getHeight(), Bitmap.Config.ARGB_8888);
final Rect rect = new Rect(0, 0, sbmp.getWidth(), sbmp.getHeight());
Paint paint = new Paint();
paint.setAntiAlias(true);
paint.setFilterBitmap(true);
paint.setDither(true);
paint.setColor(Color.parseColor("#BAB399"));
Canvas c = new Canvas(output);
c.drawARGB(0, 0, 0, 0);
c.drawCircle(sbmp.getWidth() / 2+0.7f, sbmp.getHeight() / 2+0.7f, sbmp.getWidth() / 2+0.1f, paint);
paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN));
c.drawBitmap(sbmp, rect, rect, paint);
return output;
}
}
2) - je utiliser dans ma mise en page comme ceci :
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#cccccc"
android:gravity="center"
android:orientation="vertical"
android:padding="10dp" >
<com.mikhaellopez.circularimageview.CircularImageView
android:id="@+id/imageViewCircular"
android:layout_width="@dimen/image_view_size"
android:layout_height="@dimen/image_view_size"
android:layout_gravity="center"
android:background="@drawable/border"
android:src="@drawable/image" />
</LinearLayout>
3) résultat Courant dans l'image :
Comment puis-je modifier ce code pour avoir une ombre et une circulaire de la frontière autour de mon imageView?
Objectif résultat :
Modifier 10/15/2015 :
Vous pouvez utiliser ou télécharger mes GitHub bibliothèque CircularImageView avec tous les correctifs en utilisant gradle dépendance :
compile 'com.mikhaellopez:circularimageview:2.0.1'
- Je ne sais pas quel type d'application que vous faites, mais il a l'air génial
- Votre code fonctionne et c'est vraiment bon! Mais il est possible d'utiliser wrap_content en largeur et en hauteur? Il plante quand je l'ai essayé.
- Vous avez raison, il est impossible d'utiliser wrap_content en largeur et en hauteur à l'heure actuelle. Je n'ai pas eu le temps de le changer. Le problème vient du fait que j'ai fait en utilisant les dimensions de l'image pour tracer le cercle. À l'aide de wrap_content je perdre cette information. Le problème va être résolu, je vous préviens.
- pourriez-vous corriger le mémoire lac sur cette bibliothèque? je pense que ce problème est pour android 6
Vous devez vous connecter pour publier un commentaire.
J'ai modifié le CircularImageView trouvé ici à réaliser ce que vous voulez.
Pour créer une ombre autour de la frontière, j'ai simplement utilisé ces deux lignes:
Vous avez besoin
setLayerType
en raison de l'accélération matérielle sur le Nid d'abeilles et vers le haut. Il n'a pas fonctionner sans elle, quand je l'ai essayé.Voici le code complet:
J'espère que cela aide!
.
MODIFIER
Je bifurquais votre CircularImageView et ajouté le support pour le sélecteur de superpositions. J'ai aussi amélioré les performances d'affichage de manière significative...
https://github.com/Pkmmte/CircularImageView
Pour ajouter une bordure en faisant
ImageView
comme un cercle, j'ai fait une chose simple, j'ai utilisé cette classe pour faire mon image comme un cercleet en utilisant ce sur
onCreate
j'ai appeler l'image de la mise en scène,pour ajouter une bordure, j'ai créé un cercle de la forme XML comme ceci,
puis à l'aide de mises en page, j'ai ajouté un
RelativeLayout
avecImageView
intérieur de celui-ci, en utilisant le rembourrage et d'arrière-plan dessiné avecwrap_content
, j'ai mis monRelativeLayout
comme cemaintenant, c'spectacle comme celui-ci, je ne sais pas à ajouter de l'ombre, désolé pour ce que trop
canvas.drawCircle(getWidth() /2, getWidth() /2, getWidth() /2, paint);
avant
canvas.drawBitmap(roundBitmap, 0, 0, null);
c.drawCircle(sbmp.getWidth() /2, sbmp.getHeight() /2, sbmp.getWidth() /2, paint);
pour
c.drawCircle(sbmp.getWidth() /2, sbmp.getHeight() /2, sbmp.getWidth() /2 - "the border with you prefer", paint);
Espère que cela aide.
Peut-être une meilleure solution ici.
Créer un drawable, et qui permet de définir votre fond d'attribut de votre ImageView. Vous pouvez utiliser un LayeredDrawable, pour créer de nombreux composants différents pour le composant que vous souhaitez.
Checkout cette réponse, ce qui crée un Rectangle personnalisé (mais est exactement le même, avec un Ovale\Cercle): Comment créer Google + les cartes d'INTERFACE dans une vue de liste?
J'ai trouvé une librairie qui fait exactement ce que vous voulez, a bien fonctionné pour moi.
Check it out.
https://android-arsenal.com/details/1/932
suffit d'utiliser drawCircle() avec plus de largeur et de hauteur avant de dessiner l'image réelle. Augmenter la largeur et la hauteur dans la nouvelle l'appel de la méthode en fonction de votre souhait, et de définir les autres d'une autre couleur que vous voulez sur la peinture
Cette Classe est Personnalisé Circulaire Imageview avec de l'ombre, accident vasculaire cérébral,la saturation et à l'aide de cette Coutume Circulaire ImageView vous pouvez faire de votre image une Forme Circulaire avec un Rayon. Les gars de la Circulaire de l'Ombre ImageView Pas besoin Github cette classe est assez.
Ajoutant CircularImageView à votre disposition
//Bitmap myimage=BitmapFactory.decodeResource(getResources(),R. drawable.pic);
CircularImageView c=new CircularImageView(ce,la largeur de l'écran,la hauteur de l'écran,l'image Bitmap myimage);
yourLayout.addView(c);**