بروز خطا
[message]
اشتراک در سوال
رای ها
[dataList]
ایجاد یک برش دایره ای از تصویر (حل شد)
برای برش تصویر بصورت زیر چطور باید عمل کرد ؟
با استفاده از کاستوم کنترلی که از imageView اکستند شده باشه .

میخوام که بصورت کاستوم کنترل باشه و موقعی که اون رو در view برنامه استفاده میکنم بصورت فوق نمایش داده بشه
تابع زیر رو با جستجو پیدا کردم ولی نتونستم ازش استفاده کنم
اگه کسی تونسته با مثال توضیح بده
publicclassRoundedImageViewextendsImageView{publicRoundedImageView(Context context){super(context);// TODO Auto-generated constructor stub}publicRoundedImageView(Context context,AttributeSet attrs){super(context, attrs);}publicRoundedImageView(Context context,AttributeSet attrs,int defStyle){super(context, attrs, defStyle);}@Overrideprotectedvoid onDraw(Canvas canvas){Drawable drawable = getDrawable();if(drawable ==null){return;}if(getWidth()==0|| getHeight()==0){return;}Bitmap b =((BitmapDrawable)drawable).getBitmap();Bitmap bitmap = b.copy(Bitmap.Config.ARGB_8888,true);int w = getWidth(), h = getHeight();Bitmap roundBitmap = getCroppedBitmap(bitmap, w);
canvas.drawBitmap(roundBitmap,0,0,null);}publicstaticBitmap getCroppedBitmap(Bitmap bmp,int radius){Bitmap sbmp;if(bmp.getWidth()!= radius || bmp.getHeight()!= radius)
sbmp =Bitmap.createScaledBitmap(bmp, radius, radius,false);else
sbmp = bmp;Bitmap output =Bitmap.createBitmap(sbmp.getWidth(),
sbmp.getHeight(),Config.ARGB_8888);Canvas canvas =newCanvas(output);finalint color =0xffa19774;finalPaint paint =newPaint();finalRect rect =newRect(0,0, sbmp.getWidth(), sbmp.getHeight());
paint.setAntiAlias(true);
paint.setFilterBitmap(true);
paint.setDither(true);
canvas.drawARGB(0,0,0,0);
paint.setColor(Color.parseColor("#BAB399"));
canvas.drawCircle(sbmp.getWidth()/2+0.7f, sbmp.getHeight()/2+0.7f,
sbmp.getWidth()/2+0.1f, paint);
paint.setXfermode(newPorterDuffXfermode(Mode.SRC_IN));
canvas.drawBitmap(sbmp, rect, rect, paint);return output;}}
0
0
من جسارت میکنم میگم ولی قبلا اقای شیخی همچین همچین سوالی رو پرسیدن.نمیدونم این مدنظر شما هست یا نه : لینک (11 سال پیش)
0
0
در لینک درج شده هم پاسخ دقیقی ذکر نشده (11 سال پیش)
+1
0
آقا طاهر این لینک رو چک کنید احتمالاً به دردتون میخوره (11 سال پیش)
0
0
در سایت اقای کاشی زاده لینک کاملا این موضوع بحث شده و ویدوشم جالبه (11 سال پیش)
برای این سوال 2 پاسخ وجود دارد.
پاسخ به سوال
سپهر
11 سال پیش
+2
0
من از این کد استفاده کردم ، البته این کد برای زمانی مناسب هست که از لیست ویو استفاده نکنی چون زیاد کار میکشه از گوشی ممکنه کم بیاره توی لیست ویو
ImageView mImageView = (ImageView) findViewById(R.id.profile);
Bitmap original = BitmapFactory.decodeResource(getResources(), R.drawable.profilepic);
Bitmap mask = BitmapFactory.decodeResource(getResources(), R.drawable.mask);
Bitmap result = Bitmap.createBitmap(mask.getWidth(), mask.getHeight(), Config.ARGB_8888);
Canvas mCanvas = new Canvas(result);
Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_IN));
mCanvas.drawBitmap(original, 0, 0, null);
mCanvas.drawBitmap(mask, 0, 0, paint);
paint.setXfermode(null);
mImageView.setImageBitmap(result);
mImageView.setScaleType(ScaleType.CENTER);
mImageView.setBackgroundResource(R.drawable.borderframe);
Borderframe

mask

profilepic

پاسخ به سوال
طاهر
11 سال پیش
+6
0
پس از کلی جستجو و کلنجار رفتن بالاخره تونستم یه کدی تهیه کنم :
فقط کافیه در ویو موردنظر یک ایمیج ویو قرار بدین :
main.xml
<com.negahetazehco.CustomControl.CircleRoundedImageView
android:id="@+id/rounded"
android:layout_width="300dp"
android:layout_height="300dp"
android:src="@drawable/dd" />
اینم تابع موردنظر
package com.negahetazehco.CustomControl;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Bitmap.Config;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Paint.Style;
import android.graphics.PorterDuff.Mode;
import android.graphics.PorterDuffXfermode;
import android.graphics.Rect;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.util.AttributeSet;
import android.widget.ImageView;
public class CircleRoundedImageView extends ImageView {
private static int StrokeWidth = 8;
private static String StrokeColor = "#d7d7d7";
public CircleRoundedImageView(Context context) {
super(context);
}
public CircleRoundedImageView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public CircleRoundedImageView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
@Override
protected void onDraw(Canvas canvas) {
Drawable drawable = getDrawable();
if (drawable == null) {
return;
}
if (getWidth() == 0 || getHeight() == 0) {
return;
}
Bitmap b = ((BitmapDrawable) drawable).getBitmap();
Bitmap bitmap = b.copy(Bitmap.Config.ARGB_8888, true);
int w = getWidth(), h = getHeight();
Bitmap roundBitmap = getCroppedBitmap(bitmap, w);
canvas.drawBitmap(roundBitmap, 0, 0, null);
}
public static void setStrockWidth(int value) {
StrokeWidth = value;
}
public static void setStrockWidth(String value) {
StrokeColor = value;
}
public static Bitmap getCroppedBitmap(Bitmap bmp, int width) {
Bitmap sbmp;
if (bmp != null) {
if (bmp.getWidth() != width || bmp.getHeight() != width) {
float smallest = Math.min(bmp.getWidth(), bmp.getHeight());
float factor = smallest / width;
sbmp = Bitmap.createScaledBitmap(bmp, (int) (bmp.getWidth() / factor), (int) (bmp.getHeight() / factor), false);
} else {
sbmp = bmp;
}
Bitmap output = Bitmap.createBitmap(width, width, Config.ARGB_8888);
Canvas canvas = new Canvas(output);
final int color = 0xffa19774;
final Paint paint = new Paint();
final Rect rect = new Rect(0, 0, width, width);
paint.setAntiAlias(true);
paint.setFilterBitmap(true);
paint.setDither(true);
paint.setStyle(Style.FILL_AND_STROKE);
canvas.drawARGB(0, 0, 0, 0);
paint.setColor(Color.parseColor("#ff0000"));
canvas.drawCircle(width / 2, width / 2, width / 2, paint);
paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN));
canvas.drawBitmap(sbmp, rect, rect, paint);
Paint CirclePaintBg = new Paint();
CirclePaintBg.setColor(Color.parseColor(StrokeColor));
CirclePaintBg.setAntiAlias(true);
CirclePaintBg.setStrokeWidth(StrokeWidth);
CirclePaintBg.setStyle(Style.STROKE);
canvas.drawCircle(width / 2, width / 2, width / 2 - 3, CirclePaintBg);
return output;
} else {
return null;
}
}
}
پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .