با سلام،
امروز میخوام آموزش گرد کردن تصاویر (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); } }
حال پس از اجرای برنامه تصویر به شکل زیر در اومدو مشکل حل شد:
علی علی
سلام
اگه تصویر مستطیل شکل بود چی
چطو میتونیم به شکل مربع درش بیاریم
بعد گردش کنیم
سلام،
تبدیل عکس مستطیلی به مربعی یه بحث داره، اینکه میخواهید عکستون بریده بشه یا کشیده بشه و به مربعی تبدیل بشه!
فکر کنم همین نمونه کد و آموزش جواب کاری که شما میخواهید رو برای عکس مستطیلیتون نیز بده.
اگر نه دقیق بگید که میخواهید عکس بدون برش مربعی بشه یا برش داده و مربعی بشه تا بتونم بهتر کمکتون کنم 🙂
سلام در مورد اینکه متن فارسی رو در اندروید بصورت صوت در بیارم میتونید راهنماییم کنید.
به عبارتی یه متن فارسی بدم به اپ تا از روش برام بخونه
text to speech
با سلام، متاسفانه تو این زمینه کار نکردم ولی فکر کنم بهترین کار استفاده از خود Android SDK باشه به این آدرس یه نگاهی بندازید. فقط نمیدونم از زبان پارسی ام پشتیبانی میکنه یا خیر. ممنون میشم در این مورد اگه اطلاعی به دست آوردید همینجا یه پیام بفرستید و اطلاع رسانی کنید:)
دم شما گرم ؛ کارم راه افتاد
خیلی ممنون