انجمن سایت کلیدستان


رتبه موضوع:
  • 0 رای - 0 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
thumbnail برای گریدویو- فولدر خاص یا در زمان اجرا (در برنامه نویسی اندروید)

thumbnail برای گریدویو- فولدر خاص یا در زمان اجرا (در برنامه نویسی اندروید)

#1
با سلام :
من یک آلبوم گریدویویی دارم که زمانی که کاربر می تواند به این گریدویو با گرفتن عکس یا import کردن، عکس اضافه کند . زمانی که مثلا عکس بگیرد وارد یک اکتیویتی دیگر می شود که عکس را می بیند و می تواند به آن متن و صوت اضافه کند که با sqlite به هم مرتبط می شوند. می خواهم سرعت لود شدن در گریدویو را افزایش بدهم بهتری راه چیست ؟
1- هنگامی که عکس جدید گرفته می شود  از عکس اورجینال یک thumbnail درست کنم و آن را در یک فولدر جدید قرار دهم و گریدویو را از این فولدر جدید که فقط thumbnail در آن هست لود شود؟
2- در زمان اجرا و در متد getview در imageadapter ، برای هر عکس thumbnail را بگیرم برای مورد دوم این کد را استفاده کردم:
با تشکر

کد پی‌اچ‌پی:
@Override
  
public View getView(int positionView convertViewViewGroup parent) {
   
ImageView imageView;
         if (
convertView == null) {  // if it's not recycled, initialize some attributes
             
imageView = new ImageView(mContext);
             
imageView.setLayoutParams(new GridView.LayoutParams(220220));
             
imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
             
imageView.setPadding(8888);
         } else {
             
imageView = (ImageViewconvertView;
         }

         
Bitmap bm decodeSampledBitmapFromUri(itemList.get(position), 220220);

         
imageView.setImageBitmap(bm);
         return 
imageView;
  }

  public 
Bitmap decodeSampledBitmapFromUri(String pathint reqWidthint reqHeight) {

   
Bitmap bm null;
   
// First decode with inJustDecodeBounds=true to check dimensions
   
final BitmapFactory.Options options = new BitmapFactory.Options();
   
options.inJustDecodeBounds true;
   
BitmapFactory.decodeFile(pathoptions);

   
// Calculate inSampleSize
   
options.inSampleSize calculateInSampleSize(optionsreqWidthreqHeight);

   
// Decode bitmap with inSampleSize set
   
options.inJustDecodeBounds false;
   
bm BitmapFactory.decodeFile(pathoptions); 

   return 
bm;   
  }

  public 
int calculateInSampleSize(

   
BitmapFactory.Options optionsint reqWidthint reqHeight) {
   
// Raw height and width of image
   
final int height options.outHeight;
   final 
int width options.outWidth;
   
int inSampleSize 1;

   if (
height reqHeight || width reqWidth) {
    if (
width height) {
     
inSampleSize Math.round((float)height / (float)reqHeight);    
    } else {
     
inSampleSize Math.round((float)width / (float)reqWidth);    
    }   
   }

   return 
inSampleSize;    
  }

 } 
 
پاسخ
 سپاس شده توسط mina73

thumbnail برای گریدویو- فولدر خاص یا در زمان اجرا (در برنامه نویسی اندروید)

#2
سلام.
قبلا یکی از دوستان در مورد پایین بودن سرعت GridView ای که در یکی از کلیدها شرح داده بودم، تذکر داده بود. در این موارد، اولین چیزی که به ذهن بنده می رسد، کدهای روش getView در Adapter سازنده item ها است. پس اگر سرعت نمایش GridView آهسته است (هنگام بالا و پایین رفتن و ساخته شدن آنها)، بهتر است ابتدا این بخش از کدها را بررسی کنید. منظورم بخشی از کدها که ImageView را شناسایی می کنیم نیست، بلکه شکل کلی ساختار خود روش getView است، یعنی این ساختار :

کد پی‌اچ‌پی:
if (convertView == null) {  // if it's not recycled, initialize some attributes
     
 
} else {
     
 } 

بنابراین بد نیست ساختارهای دیگر برای ساخته شدن View مربوط به item ها را هم چک کنید (معمولا کدنویسی های مختلفی برای آن داریم) و ببینید آیا سرعت بهتر می شود یا خیر (قبل از تغییر، از پروژه اندروید، یک فایل پشتیبان تهیه کنید).

این مورد را به این دلیل بیان کردم که قبلا خودم هنگام کار با ListView در مواردی که اطلاعات سنگینی نمایش داده می شود (یا موارد خاص دیگر)، عملا تاثیرگذاری زیاد اتعریف ساختار برای ساخته شدن View مربوط به item را مشاهده کردم.

---------------------------------

در مواردی که از thumbnail برای سبکتر شدن برنامه اندروید استفاده می شود (یا حتی در طراحی وب سایت ها)، thumbnail دقیقا در همان زمان ذخیره شدن عکس در حافظه، ساخته خواهد شد (و در حافظه ذخیره می شود)، نه در زمانی که می خواهیم آن را نمایش بدهیم (نه در زمان نمایش لیست). اینگونه در زمان نمایش لیست عکس ها، هیچ زمانی صرف ساختن thumbnail نخواهد شد.

bookbook 
لطفا برای درج کد، از دکمه مخصوص درج کد در ادیتور انجمن استفاده کنید.
در مورد برنامه نویسی، مدیران تنها راهنمایی می کنند و نوشتن برنامه نهایی، به عهده کاربران می باشد (اینجا محلی برای یادگیری است، نه سفارش کدنویسی).
کاربران باید ابتدا خود به خطایابی برنامه بپردازند، نه اینکه به محض دیدن خطا، کدها را در انجمن، copy و paste کرده و از مدیران انتظار بررسی داشته باشند.
پاسخ
 سپاس شده توسط mina73

thumbnail برای گریدویو- فولدر خاص یا در زمان اجرا (در برنامه نویسی اندروید)

#3
برای لود شدن عکس از Asynctask به صورت زیر استفاده کردم:
کد پی‌اچ‌پی:
                new AsyncTask<ViewHolderVoidBitmap>() {
                    
                    
                    private 
ViewHolder v;

                    @
Override
                    
protected Bitmap doInBackground(ViewHolder... params) {
                        
params[0];
                        
                        
Bitmap bm decodeSampledBitmapFromUri(mylist.get(position).getmypath(), 5050);
                        return 
bm;
         
                    }

                    @
Override
                    
protected void onPostExecute(Bitmap result) {
                        
super.onPostExecute(result);
                        
                        
             
                        
v.myimage.setImageBitmap(result);
    }
      
                } 
در کل سرعت لود شدن بهتر شد (خیلی زیاد نه) اما مهمتر از اون اینکه دیگه برنامه crash نمیشد.(قبلا داخل thread اصلی برنامه این گریدویو ساخته میشدکه خیلی خیلی بد بود)


اگر اینطور استفاده کنم وقتی اسکرول می کنم تمام عکسهای قبلی در position های قبلی را می بینم که بسیار بد بود:
کد پی‌اچ‌پی:
@Override
        
public View getView(final int positionView convertViewViewGroup parent) {
            
ViewHolder holder;

            
ImageView imageView;
            if (
convertView == null) { // if it's not recycled, initialize some
          // attributes
                
                
                
convertView.setTag(holder);
            }     
            
            else {
                
                
convertView = (ViewconvertView
اما من کلا اون if_else رو کامنت کردم و بعد از اسکرول سریع: یه عکس default رو میبینم مثلا(ic_launcher ) که خیلی بهتر شد اما چون عکسها زیاد هست( 100 به بالا)
اگر کاربر خیلی سریع با اسکرول کردن به سمت پائین بیاد باید چند ثانیه حدودا 5 الی 6 ثانیه برای دیدن عکس شماره 80 یا 90 صبر کند که اگر تعدا عکس ها بیشتر شود مطمئنا این زمان بیشتر خواهد شد.(در ضمن من تا جایی که ممکن بود سایز thumbnail رو کم کردم که سریعتر لود شود )
آیا راه دیگری برای سریعتر شدن این برنامه هست؟
 
پاسخ
 سپاس شده توسط mina73

thumbnail برای گریدویو- فولدر خاص یا در زمان اجرا (در برنامه نویسی اندروید)

#4
(۱۳۹۴/۰۵/۲۵, ۰۲:۰۹ ب.ظ)'admin' نوشته: سلام.
قبلا یکی از دوستان در مورد پایین بودن سرعت GridView ای که در یکی از کلیدها شرح داده بودم، تذکر داده بود. در این موارد، اولین چیزی که به ذهن بنده می رسد، کدهای روش getView در Adapter سازنده item ها است. پس اگر سرعت نمایش GridView آهسته است (هنگام بالا و پایین رفتن و ساخته شدن آنها)، بهتر است ابتدا این بخش از کدها را بررسی کنید. منظورم بخشی از کدها که ImageView را شناسایی می کنیم نیست، بلکه شکل کلی ساختار خود روش getView است، یعنی این ساختار :

کد پی‌اچ‌پی:
if (convertView == null) {  // if it's not recycled, initialize some attributes
     
 
} else {
     
 } 

بنابراین بد نیست ساختارهای دیگر برای ساخته شدن View مربوط به item ها را هم چک کنید (معمولا کدنویسی های مختلفی برای آن داریم) و ببینید آیا سرعت بهتر می شود یا خیر (قبل از تغییر، از پروژه اندروید، یک فایل پشتیبان تهیه کنید).

این مورد را به این دلیل بیان کردم که قبلا خودم هنگام کار با ListView در مواردی که اطلاعات سنگینی نمایش داده می شود (یا موارد خاص دیگر)، عملا تاثیرگذاری زیاد اتعریف ساختار برای ساخته شدن View مربوط به item را مشاهده کردم.

---------------------------------

در مواردی که از thumbnail برای سبکتر شدن برنامه اندروید استفاده می شود (یا حتی در طراحی وب سایت ها)، thumbnail دقیقا در همان زمان ذخیره شدن عکس در حافظه، ساخته خواهد شد (و در حافظه ذخیره می شود)، نه در زمانی که می خواهیم آن را نمایش بدهیم (نه در زمان نمایش لیست). اینگونه در زمان نمایش لیست عکس ها، هیچ زمانی صرف ساختن thumbnail نخواهد شد.



 



با تشکر اگر امکان داره دوباره یه نگاهی به سوال من داشته باشین  : یه مقدار بیشتر توضیح دادم
پاسخ
 سپاس شده توسط mina73 ، شماره مجازی امارات ، تلگرام ضد فیلتر 2023


پرش به انجمن:


کاربران در حال بازدید این موضوع: 1 مهمان