Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


Recortar imagen como círculo en Android

¿Alguien sabe cómo recortar una imagen \ mapa de bits a un círculo? No puedo encontrar ninguna solución, lo siento ..

  • Guardar la imagen capturada en el almacenamiento interno?
  • Android Blur View (Blur fondo detrás de la vista)
  • Cómo configurar el fondo transparente para el botón de imagen en el código?
  • Rotar ImageView en Android <Nivel de API 11
  • Android - efecto de deformación de imagen
  • Cargando imágenes grandes sin OutOfMemoryError
  • 6 Solutions collect form web for “Recortar imagen como círculo en Android”

    Romain Guy, anteriormente un ingeniero en el equipo de Android de Google, publicó un excelente artículo sobre el dibujo de imágenes con esquinas redondeadas . Esta idea se puede extender fácilmente a un círculo, por ejemplo, cambiando el radio de rectángulo redondeado para que cree un círculo completo.

    Del artículo:

    Para generar las imágenes redondeadas simplemente escribí un Drawable personalizado que dibuja un rectángulo redondeado usando Canvas.drawRoundRect() . El truco es utilizar una Paint con un BitmapShader para llenar el rectángulo redondeado con una textura en lugar de un color simple. Aquí es cómo se ve el código:

     BitmapShader shader; shader = new BitmapShader(bitmap, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP); Paint paint = new Paint(); paint.setAntiAlias(true); paint.setShader(shader); RectF rect = new RectF(0.0f, 0.0f, width, height); // rect contains the bounds of the shape // radius is the radius in pixels of the rounded corners // paint contains the shader that will texture the shape canvas.drawRoundRect(rect, radius, radius, paint); 

    Clase:

      public Bitmap getRoundedShape(Bitmap scaleBitmapImage) { int targetWidth = 50; int targetHeight = 50; Bitmap targetBitmap = Bitmap.createBitmap(targetWidth, targetHeight,Bitmap.Config.ARGB_8888); canvas = new Canvas(targetBitmap); Path path = new Path(); path.addCircle(((float) targetWidth - 1) / 2, ((float) targetHeight - 1) / 2, (Math.min(((float) targetWidth), ((float) targetHeight)) / 2), Path.Direction.CCW); canvas.clipPath(path); Bitmap sourceBitmap = scaleBitmapImage; canvas.drawBitmap(sourceBitmap, new Rect(0, 0, sourceBitmap.getWidth(), sourceBitmap.getHeight()), new Rect(0, 0, targetWidth, targetHeight), null); return targetBitmap; } 

    Ver:

     <ImageView android:id="@+id/imgView" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_above="@+id/btnEdit" android:layout_centerHorizontal="true" android:layout_marginTop="40dp" android:background="@drawable/rounded" android:adjustViewBounds="true" android:gravity="center" android:src="@drawable/happy"/> 

    Estilos adicionales:

      <?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" > <solid android:color="@android:color/white" /> <stroke android:width="3dip" android:color="#FF0000" /> <corners android:radius="10dp" /> <padding android:bottom="0dp" android:left="0dp" android:right="0dp" android:top="0dp" /> 

    Pruebe con el siguiente código:

     public Bitmap getRoundedShape(Bitmap scaleBitmapImage) { // TODO Auto-generated method stub int targetWidth = 50; int targetHeight = 50; Bitmap targetBitmap = Bitmap.createBitmap(targetWidth, targetHeight,Bitmap.Config.ARGB_8888); Canvas canvas = new Canvas(targetBitmap); Path path = new Path(); path.addCircle(((float) targetWidth - 1) / 2, ((float) targetHeight - 1) / 2, (Math.min(((float) targetWidth), ((float) targetHeight)) / 2), Path.Direction.CCW); canvas.clipPath(path); Bitmap sourceBitmap = scaleBitmapImage; canvas.drawBitmap(sourceBitmap, new Rect(0, 0, sourceBitmap.getWidth(), sourceBitmap.getHeight()), new Rect(0, 0, targetWidth, targetHeight), null); return targetBitmap; } 

    Wiseman Designs, tienen una fuente abierta Circular ImageView lista para su uso

    https://github.com/wisemandesigns/CircularImageView

    Esto utiliza XML en sus diseños, lo que hace la vida más fácil. Puede establecer la fuente en XML o con alguna modificación menor podría utilizar fácilmente un mapa de bits.

    Descargo de responsabilidad: Trabajo para Wiseman Designs

    Para tener esquinas redondeadas para ImageView, convierta su imagen en mapa de bits y luego pruebe el siguiente código:

      private Bitmap getRoundedCroppedBitmap(Bitmap bitmap) { int widthLight = bitmap.getWidth(); int heightLight = bitmap.getHeight(); Bitmap output = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(),Config.ARGB_8888); Canvas canvas = new Canvas(output); Paint paintColor = new Paint(); paintColor.setFlags(Paint.ANTI_ALIAS_FLAG); RectF rectF = new RectF(new Rect(0, 0, widthLight, heightLight)); canvas.drawRoundRect(rectF, widthLight / 2 ,heightLight / 2,paintColor); Paint paintImage = new Paint(); paintImage.setXfermode(new PorterDuffXfermode(Mode.SRC_ATOP)); canvas.drawBitmap(bitmap, 0, 0, paintImage); return output; } 
     finalBitmapShader shader = newBitmapShader(bitmap, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP); mPaint.setShader(shader); mBitmapWidth=mBitmap.getWidth(); mBitmapHeight=mBitmap.getHeight(); } @Override public void draw(Canvas canvas{ canvas.drawOval(mRectF,mPaint); } @Override protected void onBoundsChange(Rect bounds) { super.onBoundsChange(bounds); mRectF.set(bounds); } 

    Aquí he encontrado una muestra de tutorial de la misma en http://androidgreeve.blogspot.in/2014/09/facebook-messanger-like-profile-image.html?m=1

    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.