如何在Android中使图像适合圆形框架

我有一个ListView ,其中有一个ImageViewImageView中的图像从服务器获取后dynamic加载。 现在,我希望这些任意大小的图像适合圆形框架,怎么做? 这里是我想要的示例图片

在这里输入图像说明

Solutions Collecting From Web of "如何在Android中使图像适合圆形框架"

在以前的答案的帮助下,我想出了这个解决scheme。希望它能帮助别人:

 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仓库获取最新版本作为gradle依赖项添加。

我们可以从xml代码pipe理图像的高度和宽度,并从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; }