Android - проблема с прокруткой gridview (очень медленная прокрутка) - PullRequest
2 голосов
/ 13 марта 2012

Это мое первое приложение, поэтому я не использую код для Java.

У меня есть сетка, которая отображает миниатюры с SD-карты, но у меня не может быть плавной прокрутки.

Если я поставлю / * часть обработки * / из, если прокрутка будет такой, как я хочу, но они дублируют содержимое, а часть изображений не отображается.

Вот мой код:

-Деятельность:

        GridView gridview = (GridView) findViewById(R.id.gridview1);
     String[] projection = {MediaStore.Images.Media._ID};
     String path ="/mnt/sdcard/Pictures";
     // Create the cursor pointing to the SDCard
     cursor = managedQuery( MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
             projection, 
             //MediaStore.Images.Media.DATA + " like ? ",
             //new String[] {"%Pictures%Sopi%"},  
             "_data LIKE '%" + path  + "/%'",                
             null,
             MediaStore.Images.Media._ID);

    // Get the column index of the Media Image ID
    columnIndex = cursor.getColumnIndexOrThrow(MediaStore.Images.Media._ID);

    gridview.setAdapter(new ImageAdapterTest(RoomRawActivity.this));

-imageAdapater (получить представление):

public View getView(int position, View convertView, ViewGroup parent) {

    Log.v("adapter - getView","getView start!!");
    //Toast.makeText(mContext, "getView start!!"+position, 0).show();

    //Move cursor to current position
    RoomRawActivity.cursor.moveToPosition(position);

    ImageView picturesView;

    if (convertView == null) {

        picturesView = new ImageView(mContext);

            /* treatment */

// Get the current value for the requested column
int imageID = RoomRawActivity.cursor.getInt(RoomRawActivity.columnIndex);
// obtain the image URI
Uri uri = Uri.withAppendedPath( MediaStore.Images.Media.EXTERNAL_CONTENT_URI, Integer.toString(imageID) );
String url = uri.toString();

//Set the content of the image based on the image URI
int originalImageId = Integer.parseInt(url.substring(url.lastIndexOf("/") + 1,   url.length()));
Bitmap b = MediaStore.Images.Thumbnails.getThumbnail(mContext.getContentResolver(),
         originalImageId, 
         MediaStore.Images.Thumbnails.MINI_KIND, 
         null);
        picturesView.setPadding(5, 5, 5, 5);
        picturesView.setBackgroundResource(R.drawable.border_grid_pics);

        picturesView.setImageBitmap(b);

        picturesView.setScaleType(ImageView.ScaleType.FIT_XY);
            /* END  treatment */
        }
    }else{
        picturesView = (ImageView) convertView;   
    }



    return picturesView;
}

Большое спасибо!Дэвид.

1 Ответ

5 голосов
/ 03 февраля 2013

Вы должны привести в порядок свой метод GetView, такой как;

  • вы НЕ должны устанавливать свой ресурс изображения на getView, используйте AsyncTask
  • старайтесь не использовать SET SCALE на imageViews для производительности

Просмотр этих ссылок может быть полезен;

Использование AsyncTask для загрузки растровых изображений

http://developer.android.com/training/improving-layouts/smooth-scrolling.html http://www.programmingmobile.com/2012/03/buttery-smooth-list-scrolling-in.html

...