Лучший способ использовать растровые изображения в Android;) - PullRequest
0 голосов
/ 17 ноября 2011

Я должен создать приложение для Android для планшетов, приложение будет отображать новые журналы и его страницы.Каждый журнал имеет около 70 страниц, и каждая страница имеет обложку в виде изображения, которое весит около 700 000 байт.Главная страница приложения показывает большое изображение и небольшую галерею (Gallery View) с изображениями.Я работаю на эмуляторе с Android 3.2.Когда я добавляю изображения в галерею и пытаюсь вставить их, это не работает гладко.Иногда не загружаются все изображения и LogCat показывает мне эту информацию:

11-17 14:30:51.598: D/skia(5868): libjpeg error 105 <  Ss=%d, Se=%d, Ah=%d, Al=%d> from read_scanlines [128 168]
11-17 14:30:51.598: D/skia(5868): --- decoder->decode returned false

Теперь я помещаю в галерею около 7 изображений, которые я масштабирую следующим образом:

public Bitmap decodeFile(String f) {
    try {
        BitmapFactory.Options o = new BitmapFactory.Options();
        o.inJustDecodeBounds = true;
        BitmapFactory.decodeStream(new FileInputStream(f),null,o);

        final int REQUIRED_SIZE=75;

        int width_tmp=o.outWidth, height_tmp=o.outHeight;
        int scale=1;
        while(true) {
            if(width_tmp/2<REQUIRED_SIZE || height_tmp/2<REQUIRED_SIZE)
                break;
            width_tmp/=2;
            height_tmp/=2;
            scale*=2;
        }
        BitmapFactory.Options o2 = new BitmapFactory.Options();
        o2.inSampleSize=scale;
        return BitmapFactory.decodeStream(new FileInputStream(f), null, o2);
    } catch (FileNotFoundException e) {}
    return null;
}

и показываю в галереевот так:

    public View getView(int position, View convertView, ViewGroup parent) {
        View retval = LayoutInflater.from(parent.getContext()).inflate(R.layout.viewitem, null);
        ImageView iV = (ImageView) retval.findViewById(R.id.image);
        String path = ArrayHelper.list.get(position).get("pageId").toString();
        Bitmap bP = decodeFile(Environment.getExternalStorageDirectory() + "/MCW/" + path + "/head.jpg");
        iV.setImageBitmap(bP);
        return retval;
    }

в будущем у меня будет больше изображений в галерее, и я могу представить, как это будет работать.

Мой вопрос: что мне делать?Как мне загрузить изображения?

1 Ответ

2 голосов
/ 17 ноября 2011

Вы задали общий вопрос, поэтому лучшее, что я могу сделать, это дать вам общий ответ.Вы не должны иметь растровое изображение для всей страницы в журнале.Вы должны использовать только растровые изображения для частей изображения на странице.Остальное должно быть актуальным текстом.Это значительно сократит отпечаток вашей памяти.Кроме того, вы должны лениво загрузить эти битовые карты.Просмотрите это обсуждение , чтобы узнать, как лениво загружать изображения.

...