ورود

View Full Version : ساخت اکتیویتی شفاف



Mostafa_
سه شنبه 17 مرداد 1396, 15:56 عصر
با سلام خدمت دوستان عزیز
من میخوام ، بکگراند اکتیویتی های اپلیکیشنم به صورت بلور باشه ،،،
تو یه سری فروم ها و سایتها نوشته بود که با فتوشاپ یه عکس درست کنین و بعد جایگزین کنین ،،،
یا اینکه یه سری کد هست تو کامنت ها نوشته بودن جواب نمیده

این مدلی که دربارش صحبت میکنم،،، مثل ایفون میخوام باشه ،،، که وقتی یه پوشه رو کاربر باز میکنه بکگراند به صورت انیمیشن بلور میشه
میشه راهنمایی کنین باید چکار کنم
ممنونم

Nevercom
سه شنبه 17 مرداد 1396, 19:17 عصر
افکت بلور، به این شکل ایجاد نمیشه که بکگراند اکتیویتی رو شفاف کنی، بلکه باید تصویر قبلی رو داشته باشی، اون رو بلور کنی و بعد به عنوان بکگراند اکتیویتی تعیین کنی.

این کتابخونه (https://github.com/Blankj/AndroidUtilCode) کلی متدهای کمکی برای کارهای مختلف داره که یه بخشیش هم مربوط به تصاویر میشه، لینک زیر دقیقاً متد fastBlur رو نشون میده که میتونی ازش استفاده کنی


https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/src/main/java/com/blankj/utilcode/util/ImageUtils.java#L681


در ایتدا باید چیزی که درحال نمایش هست رو به Bitmap تبدیل کنی، و بعد اون تصویر رو بدی به متد fastBlur تا افکت Blur رو روش اعمال کنه و بعد Bitmap جدید رو به عنوان بکگراند اکتیویتی جدید تعریف کنی (یا مثلاً یه View مخفی داشته باشی که کل فضا رو بپوشونه و وقتی Dialog باز میشه اون رو Visible کنی و بکگراند رو بزاری همین تصویر Blur شده)

این کتابخانه بیشتر متدهای کمکی برای کار با تصاویر رو داره، و با این روش میتونه این افکت رو شبیه سازی کنی.

نمونه ای از این افکت رو من در این اپلیکیشن (https://cafebazaar.ir/app/ir.nevercom.google.search.image/) استفاده کردم:

146023

Mostafa_
جمعه 20 مرداد 1396, 10:20 صبح
افکت بلور، به این شکل ایجاد نمیشه که بکگراند اکتیویتی رو شفاف کنی، بلکه باید تصویر قبلی رو داشته باشی، اون رو بلور کنی و بعد به عنوان بکگراند اکتیویتی تعیین کنی.

این کتابخونه (https://github.com/Blankj/AndroidUtilCode) کلی متدهای کمکی برای کارهای مختلف داره که یه بخشیش هم مربوط به تصاویر میشه، لینک زیر دقیقاً متد fastBlur رو نشون میده که میتونی ازش استفاده کنی


https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/src/main/java/com/blankj/utilcode/util/ImageUtils.java#L681


در ایتدا باید چیزی که درحال نمایش هست رو به Bitmap تبدیل کنی، و بعد اون تصویر رو بدی به متد fastBlur تا افکت Blur رو روش اعمال کنه و بعد Bitmap جدید رو به عنوان بکگراند اکتیویتی جدید تعریف کنی (یا مثلاً یه View مخفی داشته باشی که کل فضا رو بپوشونه و وقتی Dialog باز میشه اون رو Visible کنی و بکگراند رو بزاری همین تصویر Blur شده)

این کتابخانه بیشتر متدهای کمکی برای کار با تصاویر رو داره، و با این روش میتونه این افکت رو شبیه سازی کنی.

نمونه ای از این افکت رو من در این اپلیکیشن (https://cafebazaar.ir/app/ir.nevercom.google.search.image/) استفاده کردم:



سلام عزیز
وقتت بخیر
ممنون بابت راهنماییت

به نظرم اینطوری قشنگ تر میشه ظاهر اپلیکیشن :))))
فقط یه سوال ،،، این لینکی برام گزاشتی ،، (نمونه کد)
من یه نگاه کلی بهش انداختم ،،، تمام اون هزار و پونصد خط مال این هست که فقط بکگراند شیشه ای اپلیکیشن بشه ؟؟ !!!!
منظورم اینه که سرعت لود کردن پایین نمیاد ؟؟؟
واینکه کار کردن باهاش چطوریه ؟؟؟
یعنی چطور باید تایین کنم کدوم اکتیویتی ها از این کلاس استفاده کنن و کدوما استفاده نکنن !!!
میشه یه توضیح کوتاه دربارش بدی

بازم ممنون

Nevercom
جمعه 20 مرداد 1396, 20:03 عصر
اون یک کتابخانه هست که در زمینه های مختلف، متدهای کمکی ارائه کرده.
اگه کل کتابخانه رو نیاز نداری همون کلاس رو کپی کن تو پروژه ت. ولی جدا از حجم برنامه، در سرعت اجرا تاثیری نداره

Mostafa_
جمعه 20 مرداد 1396, 21:45 عصر
اون یک کتابخانه هست که در زمینه های مختلف، متدهای کمکی ارائه کرده.
اگه کل کتابخانه رو نیاز نداری همون کلاس رو کپی کن تو پروژه ت. ولی جدا از حجم برنامه، در سرعت اجرا تاثیری نداره


منظورم این ادرس بود عزیز
https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/src/main/java/com/blankj/utilcode/util/ImageUtils.java

Nevercom
شنبه 21 مرداد 1396, 00:40 صبح
منم منظورم همین بود. کلاس ImageUtils یک کلاس از این کتابخانه هست که متدهای مختلفی برای کار با تصویر داره، مثل همون متد fastBlur.

این متد برای اینکه عملیات Blur رو سریع تر و بهینه تر انجام بده، نسخه ی کوچک شده ی تصویر رو Blur می کنه که هم سرعت بالاتری داره هم مصرف حافظه ی کمتر.

این متد (یا کلاً این کلاس) کارش این نیست که اتوماتیک بکگراند اکتیویتی رو Blur کنه، در پاسخ اول کامل مراحل رو توضیح دادم. این متد یک Bitmap رو میگیره و اون رو Blur می کنه. حالا این تصویر Blur شده رو به هر نحوی که میخوای استفاده کن.

Nevercom
یک شنبه 22 مرداد 1396, 17:47 عصر
سورس کد رو پیوست کردم


// 1. Convert the root view to a BitmapBitmap b = ImageUtils.view2Bitmap(findViewById(android.R.id.c ontent));
// 2. Blur the generated Bitmap
Bitmap blurred = ImageUtils.fastBlur(b, 0.25f, 10, true);
// 3. Set the blurred bitmap as ImageResource of overlay view and make it visible
overlay.setVisibility(View.VISIBLE);
overlay.setImageBitmap(blurred);

همونطور که می‌بینید کلیت کار ساده هست، اول کل چیزی که اکتیویتی نمایش میده رو به Bitmap تبدیل می کنیم، و بعد اون تصویر رو Blur می کنیم، و بعد این Bitmap جدید رو بعنوان تصویر ImageViewی که مخفی هست، کل فضا رو پوشونده و بالاتر از همه قرار داره، تعیین می کنیم.

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