среда, 27 июля 2011 г.

Hello, Gallery! Наступаем на те же грабли

Как я уже писал про GridView,
если вы возьмете для изучения набор свой картинок (у меня под рукой
оказалась неплохая подборка девчонок разной степени раздетости), то
выяснится, что туториал умалчивает об очень важном нюансе. Прежде чем
заталкивать картинки в GridView/Gallery их необходимо уменьшить.

Переписываем ImageAdapter следующим образом:

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

    ImageView imageView;
    if (convertView==null){
        Bitmap orig=BitmapFactory.decodeResource(mContext.getResources(), mImageIds[position]);
        int width=orig.getWidth();
        int height=orig.getHeight();
        int nw=150; int nh=150;       

        float scalew=((float)nw)/width;
        float scaleh=((float)nh)/height;
        Matrix matrix = new Matrix();
        matrix.postScale(scalew, scaleh);
        Bitmap nbmp=Bitmap.createBitmap(orig, 0, 0, width, height,matrix,true);

        imageView= new ImageView(mContext);
        //imageView.setImageResource(mImageIds[position]); раньше брали картинку прямо из ресурсов
        imageView.setImageBitmap(nbmp);
        imageView.setLayoutParams(new Gallery.LayoutParams(150,150));
        imageView.setScaleType(ImageView.ScaleType.FIT_XY);

        imageView.setBackgroundResource(mGalleryItemBackground);
        } else {
            imageView=(ImageView) convertView;
        }
    return imageView;
}



Решение взято отсюда, и убраны лишние детали. Нужна ли конструкция
    if (convertView==null) { ...  }
      else {
            imageView=(ImageView) convertView;
        }

для меня пока под вопросом. Для GridView в туториале сделано так, для Gallery нет, хотя в остальном реализация идентичная.

Комментариев нет:

Отправить комментарий