بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]
پرسش و پاسخ

چطور توی xml شکل یک لوزی بکشم؟ (حل شد)

مدیریت گفتگو
Iman1000 11 سال پیش
آخرین تغییر: 11 سال پیش

سلام

من می خوام مثل دوستمون یه عکس رو شکل لوزی بکشم و دورش سایه بندازم

البته کلاسهایی که توی گیت هاب و استک اور فلو هستند دیدم هیچ کدام لوزی به این شکل رو پیاده نکرده اند

نظرات

Iman1000 11 سال پیش
این جور که فهمیدم باید از کلاس shapeDrawable استفاده کنم فقط من نمی دونم این کلاس رو چطور بسازم؟

پاسخ‌ها 2

Iman1000 11 سال پیش

پس از سوال توی چند فروم تونستم به جواب برسم

یک لایبری بسیار کاربردی پیدا کردم که shape های زیادی به xml به ما میده

خواستم نتیجه رو این اعلام کرده باشم تا بقیه نیز ازش بهره ببرند لینک

فقط توی ایمپرتش توی ایکلیس بنده مشکل دارم اگه دوستان راهنمایی کنند

نظرات

کاشی زاده 11 سال پیش
این لایبری ربطی به xml نداره و با استفاده از canvas در جاوا داره این طرح هارو پیاده میکنه و در واقع داره یکسری خطوط رو به هم متصل میکنه ، در مورد مشکلتون هم اگر اروری که میگیرید رو قرار بدید میتونیم کمکتون کنیم .
Iman1000 11 سال پیش
جناب کاشی زاده بنده فقط نیاز به ایجاد شکل لوزی برای imageview دارم به بهترین نحو البته دایره رو دیدم ولی دنبال کلاسی هستم که بتونم عکسم رو لوزی بکنه
Iman1000 11 سال پیش

کلاسش به شرح زیر است




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.Path;
import android.graphics.Point;
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 DiamondImageView extends ImageView {

public DiamondImageView(Context ctx, AttributeSet attrs) {
super(ctx, attrs);
}


@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 = getRoundedCroppedBitmap(bitmap, w);
canvas.drawBitmap(roundBitmap, 0, 0, null);

}


public static Bitmap getRoundedCroppedBitmap(Bitmap bitmap, int radius) {
Bitmap finalBitmap;
if (bitmap.getWidth() != radius || bitmap.getHeight() != radius)
finalBitmap = Bitmap.createScaledBitmap(bitmap, radius, radius,
false);
else
finalBitmap = bitmap;
Bitmap output = Bitmap.createBitmap(finalBitmap.getWidth(),
finalBitmap.getHeight(), Config.ARGB_8888);
Canvas canvas = new Canvas(output);

Paint paint = new Paint();
final Rect rect = new Rect(0, 0, finalBitmap.getWidth(),
finalBitmap.getHeight());

Point point1_draw = new Point(113, 0);
Point point2_draw = new Point(0, 75);
//Point point3_draw = new Point(0, 100);
Point point4_draw = new Point(113, 150);
//Point point5_draw = new Point(150, 100);
Point point6_draw = new Point(225, 75);

Path path = new Path();
path.moveTo(point1_draw.x, point1_draw.y);
path.lineTo(point2_draw.x, point2_draw.y);
//path.lineTo(point3_draw.x, point3_draw.y);
path.lineTo(point4_draw.x, point4_draw.y);
//path.lineTo(point5_draw.x, point5_draw.y);
path.lineTo(point6_draw.x, point6_draw.y);

path.close();
canvas.drawARGB(0, 0, 0, 0);
paint.setColor(Color.parseColor("#BAB399"));
canvas.drawPath(path, paint);
paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN));
canvas.drawBitmap(finalBitmap, rect, rect, paint);

return output;
}

}

نظرات


پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .