گرد کردن تصویر در اندروید به صورت برنامه نویسی

با سلام، 

امروز میخوام آموزش گرد کردن تصاویر (image) در اندروید به صورت برنامه نویسی (programmatically) رو در محیط اندروید استادیو بزارم.

خب اول از همه میخوام مشکل رو به صورت تصویر نشون بده، تو تصویر زیر میبینید که تصویر مخاطب به صورت مربعیه و من میخوام گرد بشه.

خب قدم اول اینه که برای تصویر مورد نظر ر صفحه xml حتمن یه id  در نظر گرفته باشیم که بشه از طریق Activity مورد نظرمان بهش دسترسی داشته باشیم.

قدم دوم ساخت کلاسی به نام roundImage هست که کدش رو زیر آوردم:

package arisa_co.com.appwithnav.Utils;

import android.graphics.Bitmap;
import android.graphics.BitmapShader;
import android.graphics.Canvas;
import android.graphics.ColorFilter;
import android.graphics.Paint;
import android.graphics.PixelFormat;
import android.graphics.Rect;
import android.graphics.RectF;
import android.graphics.Shader;
import android.graphics.drawable.Drawable;

public class RoundImage extends Drawable {
   private final Bitmap mBitmap;
   private final Paint mPaint;
   private final RectF mRectF;
   private final int mBitmapWidth;
   private final int mBitmapHeight;

   public RoundImage(Bitmap bitmap) {
      mBitmap = bitmap;
      mRectF = new RectF();
      mPaint = new Paint();
      mPaint.setAntiAlias(true);
      mPaint.setDither(true);
      final BitmapShader shader = new BitmapShader(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);
   }

   @Override
   public void setAlpha(int alpha) {
      if (mPaint.getAlpha() != alpha) {
         mPaint.setAlpha(alpha);
         invalidateSelf();
      }
   }

   @Override
   public void setColorFilter(ColorFilter cf) {
      mPaint.setColorFilter(cf);
   }

   @Override
   public int getOpacity() {
      return PixelFormat.TRANSLUCENT;
   }

   @Override
   public int getIntrinsicWidth() {
      return mBitmapWidth;
   }

   @Override
   public int getIntrinsicHeight() {
      return mBitmapHeight;
   }

   public void setAntiAlias(boolean aa) {
      mPaint.setAntiAlias(aa);
      invalidateSelf();
   }

   @Override
   public void setFilterBitmap(boolean filter) {
      mPaint.setFilterBitmap(filter);
      invalidateSelf();
   }

   @Override
   public void setDither(boolean dither) {
      mPaint.setDither(dither);
      invalidateSelf();
   }

   public Bitmap getBitmap() {
      return mBitmap;
   }
}

قدم سوم استفاده از کلاس فوق درون اکتیویتی مورد نظرمون برای گرد کردن تصویر، کد زیر این مرحله رو کامل نشون میده:

public class UserProfileActivity extends Activity {
    RoundImage roundedImage;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_user_profile);
        //getActionBar().setDisplayHomeAsUpEnabled(true);

        //// sadegh round user image
        ImageButton imgProfile= (ImageButton)findViewById(R.id.user_profile_photo);
        Bitmap bm = BitmapFactory.decodeResource(getResources(), R.drawable.blank_contact); // Load default image
        roundedImage = new RoundImage(bm);
        imgProfile.setImageDrawable(roundedImage);
    }


}

حال پس از اجرای برنامه تصویر به شکل زیر در اومدو مشکل حل شد:

 

علی علی