آموزش های این وب سایت به صورت رایگان در دسترس است. اطلاعات بیشتر
بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]

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

امید  10 سال پیش  10 سال پیش
+5 0

سلام

 

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

         Display display = getWindowManager().getDefaultDisplay();
int width = display.getWidth(); // deprecated
int height = display.getHeight(); // deprecated
Log.i("LOG", "Width: " + width);
Log.i("LOG", "Height: " + height);

حالا من میخوام به طور مثال دایره ای رو رسم کنم که در تمام سایز های گوشی یکجور نمایش داده بشه و در یکی کوچیک و در دیگری بزرگ نباشه.

 canvas.drawCircle((100,100, 10, paint);

توی کد بالا دایره در موقعیت 100 و 100 رسم میشه و این مختصات در یک گوشی با سایز 1532 در 2560 گوشه بالا سمت چپ رسم میشه و در یک گوشی با سایز 240 در 320 تقریبا مرکز گوشی میشه.


حالا سوال من اینجاست که چجوری میشه این رو بهینه کرد و فرمولش چیه؟

 برای این سوال 1 پاسخ وجود دارد.
پاسخ به سوال 
Reza  10 سال پیش
+6 0

    سلام خب طبیعیه ، متد drawCircle آرگومان بر حسب پیکسل میگیره ، و برای اینکه شما در همه رزولوشن ها نتیجه یکسان بگیری باید مقدار خودت رو بر حسب dp درج کنی و چون پارامتر باید بر حسب پیکسل باشه شما باید یه متد بسازی که واحد dp رو به px تبدیل کنه :

public static float convertDpToPixel(float dp) {
Resources resources = context.getResources();
DisplayMetrics metrics = resources.getDisplayMetrics();
float px = dp * (metrics.densityDpi / 160f);
return px;
}

حالا کد رو اینطوری بنویس :

canvas.drawCircle(convertDpToPixel(100),convertDpToPixel(100), convertDpToPixel(10), paint);

حالا در هر رزولوشنی با فاصله 100 dip از گوشه و با شعاع 10 dip رسم میشه

    این برای در نظر گرفتن رزولوشن بود ، یعنی با کد بالا ، الان شما در هر گوشی دایره ای داری که مثلا از گوشه 1 اینچ فاصله داره ولی اگه سایز گوشی تغییر کنه میبینی با اینکه فاصله دایره از گوشه ثابت هست ولی نسبت به عرض و طول صفحه نمایش متفاوته ، اینجا دیگه بستگی به خودت داره که چطوری میخوای طراحی کنی و نسبت ها با هم چطوری باشن . مثلا اگه میخوای مرکز دایره در 1/3 ارتفاع و در وسط عرض قرار بگیره و با همون شعاع 10 dip :

canvas.drawCircle(width/2,height/3, convertDpToPixel(10), paint);
0 0
ممنون رضا جان، مشکلم کامل حل نشد ولی پیشنهادت خیلی کمکم کرد (10 سال پیش)
0 0
مشکل چیه ، و میخوای چیکار کنی ؟ شما اگه میخوای دایره در همه گوشی ها یه جور نمایش داده بشه راهش همون استفاده از نسبت هاست ( عرض و طول ) دقیقا مثل طراحی لایه های پیچیده . (10 سال پیش)

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