View Full Version : نمایش تصویر در متن html در html.fromhtml
mohammad hoseini
چهارشنبه 02 اردیبهشت 1394, 22:22 عصر
سلام خدمت استادان عزیز . من در برنامه نویسی تندروید خیلی مبتدی هستم.
من تازه با کلاس html و تابع fromhtml آشنا شدم فقط چند سوال در این مورد داشتم.
من قصد دارم توی این متن html یک تصویر هم با تگ img لود کنم که توجه کنید این تصویر از اینترنت نمیگیره ، توی asset هام دارم
. حالا src رو چی وارد کنم؟
دوباره میگم که میخوام از یک عکس لوکال استفاده کنم ، پس میشه بگید بدون asynctask هم میشه ؟
خواهشن توضیح کامل بدید . ممنون
tux-world
چهارشنبه 02 اردیبهشت 1394, 23:04 عصر
بدون اسینک میخوایید؟ ببینید در کل برای لود عکس از اون استفاده میشه چرا؟ چون این که زمان مشخصی نداره که بدونید کی دانلودش تموم میشه برای اینکه برنامه کرش نکنه مجبور!! هستید ازش استفاده کنید. بعدش با fromHtml نمیتونید عکس رو داخل TextView بزارید
mohammad hoseini
پنج شنبه 03 اردیبهشت 1394, 00:29 صبح
خوب الان من یک متن html دارم با عکس هایی که توی asset هام هستند چطور به عکس ها ادرس دهی بدم و چطور کلا نمایش بدم؟
shahin bahari
پنج شنبه 03 اردیبهشت 1394, 00:31 صبح
بستگی داره! اگه شما چند سایز از عکس داشه باشید و بسته به چگالی صفحه اون رو انتخاب کنید میشه بدون asyncTask هم کار کرد و مشکل تاخیر جوابگویی صفحه ندارید (به شرطی که تعداد عکس ها هم زیاد نباشه و یا سایز های خیلی بزرگ نباشه!!! مثلا اگه از این شکلک ها وسط متن میخواید بزارید نیازی به AsyncTask نیست.)
برای اینکه عکس رو هم بتونید نمایش بدید باید یه کلاس ImageGetter بنویسید و اون رو به عنوان argument به متد fromHtml پاس بدید. هر src که برای عکس ها گزاشته باشید مشکل نداره و خودتون باید تو کلاس ImageGetter عکس مناسب رو بهش بدید. توضیح کامل این قضیه رو قبلا نوشته بودم. یه جستجو کنید پیدا میشه.
tux-world
پنج شنبه 03 اردیبهشت 1394, 08:21 صبح
بستگی داره! اگه شما چند سایز از عکس داشه باشید و بسته به چگالی صفحه اون رو انتخاب کنید میشه بدون asyncTask هم کار کرد و مشکل تاخیر جوابگویی صفحه ندارید (به شرطی که تعداد عکس ها هم زیاد نباشه و یا سایز های خیلی بزرگ نباشه!!! مثلا اگه از این شکلک ها وسط متن میخواید بزارید نیازی به AsyncTask نیست.)
کاملا اشتباه هستش حتی اگه دو کیلوبایت هم باشه باز ممکنه برنامه کرش کنه چون از یه ریسورس دیگه داره استفاده میکنه پس بهتره تا دست گل به آب ندادید و برنامتون تو گوشی های مختلف قاتی نکنه ازش استفاده کنید
shahin bahari
پنج شنبه 03 اردیبهشت 1394, 22:21 عصر
کاملا اشتباه هستش حتی اگه دو کیلوبایت هم باشه باز ممکنه برنامه کرش کنه چون از یه ریسورس دیگه داره استفاده میکنه پس بهتره تا دست گل به آب ندادید و برنامتون تو گوشی های مختلف قاتی نکنه ازش استفاده کنید
مشکلی که اکثرا پیش میاد این هست که استفاده درستی از منابع سخت افزاری نمیشه و یه جورایی اون رو هدر میدن برای همین کرش پیش میاد. مثلا عکس رو تو ابعاد اصلی باز می کنند و بعد ریسایز می کنند در صورتیکه باید عکس به صورت ریسایز شده باز بشه! از این ریزه کاری ها زیاد هست! چیزی که گفتم البته با همون شرایط! درست هست و مطمئن هستم مشکلی پیش نمیاره. گرچه خودم این کار رو نمی کنم. اون هم نه به دلیل ترس از کرش و فقط به خاطر این که زمان پاسخ برنامه زیاد نباشه و بین درخواست یوزر و انجام شدن اون حداقل تاخیر باشه! این رو هم اضافه کنم مشکل کمبود حافظه ربطی به داشتن یا نداشتن ترد نداره و هر جایی می تونه پیش بیاد و فقط برای مثال گفتم.
حالا چرا من گفتم که اینجا می تونه از ترد استفاده نکنه؟ اولین دلیلش این بود که ایشون ذکر کردن که مبتدی هستند! درسته که استفاده از ترد خیلی مزایا داره ولی باید مدیریت ساخت و از بین رفتن اون ها رو هم بدونید تا خودشون سربار نباشن تو برنامه! بیاید یه حالت بد رو بررسی کنیم! یه لیست داریم که تصاویر اون با AsyncTask لود میشه.حالا وقتی اسکرول سریع انجام میدیم و قبل از تمام شدن ترد، ترد های جدیدی ساخته میشه و یه صف طولانی با چند بار اسکرول متوالی پیش میاد که همه منتظر این هستن تا نوبت اجراشون برسه و بعد از لود شدن تصویر هیچ استفاده ای از اون نکنن!!!!!!( چون اون ویو از بین رفته و دیگه بهش نیازی نیست) تو این شرایط AsyncTask کار رو بدتر کرده چون ما مدیریت اجرا شدنشون رو انجام ندادیم و ترد های اضافی رو cancel نکردیم.
خلاصه این که برای یه شخص مبتدی بهتر هست که اصل ماجرا رو یاد بگیره پیاده کنه و تو مرحله ی بعد میره سراغ موازی سازی و این بحث ها...
پیشنهاد می کنم شما هم یه بار این قضیه رو برای همون عکس 2 کیلوبایتی بدون ترد تست کنید و زمان لود شدن و حافظه رو یه بررسی کنید. دلیل این پیشنهادم این بود که شما گفته بودید: "بعدش با fromHtml نمیتونید عکس رو داخل TextView بزارید"
textView در اصل از SpannableString استفاده می کنه و معمولا برای این کار نیاز به موازی سازی نیست. البته حالت خاص وجود داره همیشه!
http://stackoverflow.com/questions/3176033/spannablestring-with-image-example
حالا چرا معمولا موازی سازی نمی کنن!؟ چون TextView خودش یه ویو کلی هست و این رو هم می دونیم که از تو ترد به UI دسترسی نداریم. نیاز داریم که 5 تا تصویر رو توی متن نشون بدیم یعنی اگه بخوایم هر تصویر رو با یه asyncTask لود کنیم باید 5 بار مقدار یه ویو رو تغییر بدیم! حالا این که چطور بفهمیم که این تصویر برای کجای متن هست و این حرف ها هم باید پیاده سازی بشه! واسه این داستانا از این ویژگی جایی استفاده میشه که لود تصاویر به قدری نباشه که نیاز به موازی سازی داشته باشه. اگه نیاز بود روش های بهتری هست مثل استفاده از وب ویو و...
یه بار سعی کنید با استفاده از AsyncTask این داستان رو بنویسید تا متوجه منظورم بشید. شدنش میشه ولی آیا واقعا لازمه؟!؟!؟! آیا یه شخص مبتدی از پس نوشتنش بر میاد؟!
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.