Intereting Posts

Как сделать изображение вписываемым в круговую рамку в андроиде

У меня есть ListView в котором есть ImageView , изображение в ImageView динамически загружается после его загрузки с сервера. Теперь, я хочу, чтобы эти изображения любого размера вписывались в круглый кадр, как это сделать? Вот пример рисунка того, что я хочу

Введите описание изображения здесь

Solutions Collecting From Web of "Как сделать изображение вписываемым в круговую рамку в андроиде"

С помощью предыдущего ответа я придумал это решение. Надеюсь, что это поможет другим:

 import android.app.Activity; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Canvas; import android.graphics.Paint; import android.graphics.PorterDuff.Mode; import android.graphics.PorterDuffXfermode; import android.graphics.Rect; import android.graphics.RectF; import android.os.Bundle; import android.widget.ImageView; public class CircleImage extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.circle_layout); ImageView img1 = (ImageView) findViewById(R.id.imageView1); Bitmap bm = BitmapFactory.decodeResource(getResources(), R.drawable.hair_four); Bitmap resized = Bitmap.createScaledBitmap(bm, 100, 100, true); Bitmap conv_bm = getRoundedRectBitmap(resized, 100); img1.setImageBitmap(conv_bm); // TODO Auto-generated method stub } public static Bitmap getRoundedRectBitmap(Bitmap bitmap, int pixels) { Bitmap result = null; try { result = Bitmap.createBitmap(200, 200, Bitmap.Config.ARGB_8888); Canvas canvas = new Canvas(result); int color = 0xff424242; Paint paint = new Paint(); Rect rect = new Rect(0, 0, 200, 200); paint.setAntiAlias(true); canvas.drawARGB(0, 0, 0, 0); paint.setColor(color); canvas.drawCircle(50, 50, 50, paint); paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN)); canvas.drawBitmap(bitmap, rect, rect, paint); } catch (NullPointerException e) { } catch (OutOfMemoryError o) { } return result; } } 

Попробуйте этот код:

 public static Bitmap getRoundedRectBitmap(Bitmap bitmap, int pixels) { try { result = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(), Bitmap.Config.ARGB_8888); canvas = new Canvas(result); color = 0xff424242; paint = new Paint(); rect = new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight()); rectF = new RectF(rect); 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); } catch (NullPointerException e) { // return bitmap; } catch (OutOfMemoryError o){} return result; } 

Если вы хотите получить реальный круг, вы можете передать 100px качестве параметра.

Обновить

В Github есть CircleImageView .

Вы можете получить последнюю версию из репозитория Maven как добавление в качестве зависимости от градиента.

В этом есть много уроков. Я думаю, это поможет.

https://github.com/lopspower/CircularImageView

https://github.com/wisemandesigns/CircularImageView

https://coderwall.com/p/hmzf4w

Мы можем управлять высотой и шириной изображения из xml-кода и рисовать круг / овал из java-кода, например

  <ImageView android:id="@+id/imageView1" android:layout_width="@dimen/width" android:layout_height="@dimen/height" /> 

Для овального просмотра

 ImageView img1 = (ImageView) findViewById(R.id.imageView1); Bitmap bm = BitmapFactory.decodeResource(getResources(), R.drawable.user_image); Bitmap conv_bm = getRoundedBitmap(bm); img1.setImageBitmap(conv_bm); public static Bitmap getRoundedBitmap(Bitmap bitmap) { final Bitmap output = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(), Bitmap.Config.ARGB_8888); final Canvas canvas = new Canvas(output); final int color = Color.RED; final Paint paint = new Paint(); final Rect rect = new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight()); final RectF rectF = new RectF(rect); paint.setAntiAlias(true); canvas.drawARGB(0, 0, 0, 0); paint.setColor(color); canvas.drawOval(rectF, paint); paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN)); canvas.drawBitmap(bitmap, rect, rect, paint); bitmap.recycle(); return output; } } 
  public static Bitmap getCircleBitmap(Bitmap bitmap) { final Bitmap circuleBitmap = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getWidth(), Bitmap.Config.ARGB_8888); final Canvas canvas = new Canvas(circuleBitmap); final int color = Color.RED; final Paint paint = new Paint(); final Rect rect = new Rect(0, 0, bitmap.getWidth(), bitmap.getWidth()); final RectF rectF = new RectF(rect); paint.setAntiAlias(true); canvas.drawARGB(0, 0, 0, 0); paint.setColor(color); canvas.drawOval(rectF, paint); paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN)); canvas.drawBitmap(bitmap, rect, rect, paint); bitmap.recycle(); return circuleBitmap; }