Как сделать ImageView в круговой форме?
Я хочу сделать что-то подобное.
![image in List view]()
Это строка списка с именем и изображением пользователя.
Я сделал несколько поисков и сделал круговое изображение, но не идеальное решение.
Любая помощь поможет мне.
мой код добавлен в класс Image Loader
public Bitmap processBitmap(Bitmap bitmap) {
int pixels = 0;
if (mRound == 0)
pixels = 120;
else
pixels = mRound;
Bitmap output = Bitmap.createBitmap(bitmap.getWidth(),
bitmap.getHeight(), Config.ARGB_8888);
Canvas canvas = new Canvas(output);
final int color = 0xff424242;
final Paint paint = new Paint();
final Rect rect = new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight());
final RectF rectF = new RectF(rect);
final float roundPx = pixels;
paint.setAntiAlias(true);
canvas.drawARGB(0, 0, 0, 0);
paint.setColor(color);
canvas.drawRoundRect(rectF, roundPx, roundPx, paint);
paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN));
canvas.drawBitmap(bitmap, rect, rect, paint);
return output;
}
Спасибо.
Ответы
Ответ 1
вы также можете использовать эту функцию... Его работа для меня..
public Bitmap getRoundedShape(Bitmap scaleBitmapImage) {
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;
}
Ответ 2
Это, вероятно, не ответит на ваш вопрос, но в качестве альтернативы вы могли бы имитировать этот эффект, имея 2 ImageViews в FrameLayout
например: один внизу - это будет изображение, а один сверху - это будет серый квадрат с кругом в середине, а "тело" цирла будет прозрачным.
Таким образом вам не придется выполнять какую-либо обработку растрового изображения. Но выберите тот, который лучше подходит для ваших нужд.
Ответ 3
Это достигается благодарностью за ответ.
Bitmap circleBitmap = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(), Bitmap.Config.ARGB_8888);
Paint paint = new Paint();
paint.setStrokeWidth(5);
Canvas c = new Canvas(circleBitmap);
//This draw a circle of Gerycolor which will be the border of image.
c.drawCircle(bitmap.getWidth()/2, bitmap.getHeight()/2, bitmap.getWidth()/2, paint);
BitmapShader shader = new BitmapShader(bitmap, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP);
paint.setAntiAlias(true);
paint.setShader(shader);
// This will draw the image.
c.drawCircle(bitmap.getWidth()/2, bitmap.getHeight()/2, bitmap.getWidth()/2-2, paint);
![enter image description here]()
Округленное изображение Использование imageLoader github.com/nostra13/Android-Universal-Image-Loader
Создайте параметры;
DisplayImageOptions options = new DisplayImageOptions.Builder()
// this will make circle, pass the width of image
.displayer(new RoundedBitmapDisplayer(getResources().getDimensionPixelSize(R.dimen.image_dimen_menu)))
.cacheOnDisc(true)
.build();
imageLoader.displayImage(url_for_image,ImageView,options);
Или U может использовать библиотеку Picasso из скрипта.
Picasso.with(mContext).load(URL+b.image)
.placeholder(R.drawable.profile)
.error(R.drawable.profile)
.transform(new RoundedTransformation(50, 4))
.resizeDimen(R.dimen.list_detail_image_size, R.dimen.list_detail_image_size)
.centerCrop()
.into(v.im_user);
вы можете скачать файл RoundedTrasformation
ВАЖНО: Я нашел одну проблему при использовании UIL. Если вы не поместили атрибут xml android: contentDescription = "TODO" в ImageView. Затем UIL показывает простое изображение.
Надеюсь, все поймут