Вместо создания нового ImageView
в getView
вы должны преобразовать convertView
в нужный вам вид.Вот пример одного из способов сделать это:
public View getView(int position, View cv, ViewGroup parent) {
if (! convertView istanceof ImageView)
{
ImageView cv = new ImageView(mContext);
cv.setLayoutParams(new Gallery.LayoutParams(150, 100));
cv.setScaleType(ImageView.ScaleType.FIT_XY);
cv.setBackgroundResource(mGalleryItemBackground);
}
cv.setImageResource(mImageIds[position]);
return cv;
}
Просто преобразуйте convertView, чтобы он соответствовал тому, что вы хотите, но сначала убедитесь, что это правильный тип представления.
Обновление : Вы также должны уменьшить изображения перед их отображением.Предположим, что у вас есть изображение размером 500x500 пикселей, сохраненное в res/drawable
, но изображение будет занимать только 125x125 пикселей на экране.Вам нужно уменьшить изображение перед его отображением.Чтобы узнать, сколько вам нужно уменьшить изображение, вы должны сначала получить его размер
int maxSize = 125; // make 125 the upper limit on the bitmap size
int resId; // points to bitmap in res/drawable
BitmapFactory.Options opts = new BitmapFactory.Options();
opts.inJustDecodeBounds = true; // Only get the bitmap size, not the bitmap itself
BitmapFactory.decodeResource(c.getResources(), resId, opts);
int w = opts.outHeight, h = opts.outHeight;
int maxDim = (w>h)?w:h; // Get the bigger dimension
Теперь, когда у нас есть размер, рассчитайте, сколько нужно уменьшить изображение.Если у нас есть растровое изображение 500x500, и мы хотим растровое изображение 125x125, мы сохраняем 1 из каждых 4 пикселей, которые мы получаем из int inSample = 500/125;
int inSample = maxDim/maxSize;
opts = new BitmapFactory.Options();
opts.inSampleSize = inSample;
Теперь просто декодируйте ресурсы, и у нас есть наше растровое изображение с пониженной выборкой.
Bitmap b = BitmapFactory.decodeResource(c.getResources(), resId, opts);
Имейте в виду, что исходное растровое изображение не изменяется.Вы можете снова декодировать изображение и установить opts.inSampleSize
на 1
, и вы получите все 500x500 растровое изображение.