اندروید

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

با سلام، 

امروز میخوام آموزش گرد کردن تصاویر (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);
    }


}

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

 

علی علی

5 Comments on “گرد کردن تصویر در اندروید به صورت برنامه نویسی

  1. سلام
    اگه تصویر مستطیل شکل بود چی
    چطو میتونیم به شکل مربع درش بیاریم
    بعد گردش کنیم

    1. سلام،
      تبدیل عکس مستطیلی به مربعی یه بحث داره، اینکه میخواهید عکستون بریده بشه یا کشیده بشه و به مربعی تبدیل بشه!
      فکر کنم همین نمونه کد و آموزش جواب کاری که شما میخواهید رو برای عکس مستطیلیتون نیز بده.
      اگر نه دقیق بگید که میخواهید عکس بدون برش مربعی بشه یا برش داده و مربعی بشه تا بتونم بهتر کمکتون کنم 🙂

  2. سلام در مورد اینکه متن فارسی رو در اندروید بصورت صوت در بیارم میتونید راهنماییم کنید.
    به عبارتی یه متن فارسی بدم به اپ تا از روش برام بخونه
    text to speech

    1. با سلام، متاسفانه تو این زمینه کار نکردم ولی فکر کنم بهترین کار استفاده از خود Android SDK باشه به این آدرس یه نگاهی بندازید. فقط نمیدونم از زبان پارسی ام پشتیبانی میکنه یا خیر. ممنون میشم در این مورد اگه اطلاعی به دست آوردید همینجا یه پیام بفرستید و اطلاع رسانی کنید:)

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *