Как сохранить уже загруженные изображения в Gridview после прокрутки в Android

У меня есть GridView который показывает изображения с SDCard. я использую AsyncTask в getview() метод (getview загружает растровое изображение в AsyncTask) из этого урока.

GridView прокрутка быстрая и загружает изображения в Gridview быстро и правильно позиционирует, но моя проблема:

Когда я прокручиваю GridView, items that are not visible on the screen can not be held,

И если вернуться к предыдущей позиции, элементы загружаются снова с getview() метод.

С вышеупомянутым учебником, когда я прокручиваю GridView все позиции изображений изменились.

Я изменился getview() (if_else который показывает с комментарием в моем коде) и разрешил его, но он не сохраняет предыдущее изображение и при быстрой прокрутке GridViewсначала изображение по умолчанию (ic_launcher), и через некоторое время загружается правильное изображение. Как решить эту проблему? (удерживайте все изображения в GridView без уменьшения скорости прокрутки)

    @Override
    public View getView( final int position, View view, ViewGroup parent) {

        final ViewHolder holder;
        //if (view == null) {
            holder = new ViewHolder();

            view = inflater.inflate(R.layout.showitems,parent, false);

            holder.myimage=(ImageView) view.findViewById(R.id.imagess);
            holder.myimage.setScaleType(ImageView.ScaleType.CENTER_CROP);
            holder.myimage.setPadding(8, 8, 8, 8);


            view.setTag(holder);
    //      } 

    /*  else {

            holder = (ViewHolder) view.getTag();
            }*/

        new AsyncTask<ViewHolder, Void, Bitmap>() {


                    private ViewHolder v;

                    @Override
                    protected Bitmap doInBackground(ViewHolder... params) {
                        v = params[0];

                        Bitmap bm = decodeSampledBitmapFromUri(mylist.get(position).getmypath(), 220, 220);
                        return bm;

                    }

                    @Override
                    protected void onPostExecute(Bitmap result) {
                        super.onPostExecute(result);

                        v.myimage.setImageBitmap(result);
    }

                }

                .execute(holder);


            view.setOnClickListener(new OnClickListener() {

                @Override
                public void onClick(View v) {

                    String this_id= mylist.get(position).getmyid();
                    String this_path=mylist.get(position).getmypath();

                    Intent ss=new Intent(mContext,show.class);
                    ss.putExtra("id", this_id);
                    mContext.startActivity(ss);

                }
            });

        return view;


}


    public Bitmap decodeSampledBitmapFromUri(String path, int reqWidth,int reqHeight) {

        Bitmap bm = null;

        // First decode with inJustDecodeBounds=true to check dimensions
        final BitmapFactory.Options options = new BitmapFactory.Options();
        options.inJustDecodeBounds = true;
        BitmapFactory.decodeFile(path, options);

        // Calculate inSampleSize

        options.inSampleSize = calculateInSampleSize(options, reqWidth,reqHeight);

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



        return bm;

    }




    public Bitmap decodeSampledBitmapFromUri_VID(String path, int reqWidth,int reqHeight) {

        Bitmap bm = null;

        // First decode with inJustDecodeBounds=true to check dimensions
        final BitmapFactory.Options options = new BitmapFactory.Options();
        options.inJustDecodeBounds = true;
        ThumbnailUtils.createVideoThumbnail(path, MediaStore.Video.Thumbnails.MINI_KIND);

        // Calculate inSampleSize

        options.inSampleSize = calculateInSampleSize(options, reqWidth,reqHeight);

        // Decode bitmap with inSampleSize set
        options.inJustDecodeBounds = false;
        bm = ThumbnailUtils.createVideoThumbnail(path, MediaStore.Video.Thumbnails.MINI_KIND);



        return bm;

    }

    public int calculateInSampleSize(

            BitmapFactory.Options options, int reqWidth, int 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;

    }

0 ответов

Другие вопросы по тегам