Обрезать изображение как круг в Android

Кто-нибудь знает, как обрезать изображение \ bitmap в круг? Я не могу найти решение, извините ..

Ромен Гай, ранее инженер команды Android в Google, опубликовал отличную статью о рисовании изображений с закругленными углами . Эту идею можно легко распространить на круг, например, изменив радиус закругленного прямоугольника так, чтобы он создавал полный круг.

Из статьи:

Чтобы создать округленные изображения, я просто написал пользовательский Drawable который рисует закругленный прямоугольник с помощью Canvas.drawRoundRect() . Хитрость заключается в использовании Paint с BitmapShader для заполнения закругленного прямоугольника текстурой вместо простого цвета. Вот как выглядит код:

 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); 

Класс:

  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; } 

Посмотреть:

 <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"/> 

Дополнительные стили:

  <?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" /> 

Попробуйте использовать код ниже:

 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, с открытым исходным кодом Circular ImageView готовы к использованию

https://github.com/wisemandesigns/CircularImageView

Это использует XML в ваших макетах, что облегчает жизнь. Вы можете установить источник в XML или с некоторыми незначительными изменениями, которые могут легко использовать Bitmap.

Отказ от ответственности: я работаю над Wiseman Designs

Чтобы иметь закругленные углы для ImageView, преобразуйте изображение в растровое изображение, а затем попробуйте выполнить следующий код:

  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); } 

Здесь я нашел образец учебника по адресу http://androidgreeve.blogspot.in/2014/09/facebook-messager-like-profile-image.html?m=1