2015-12-02 2 views
-1

Я делаю какое-то приложение, которое показывает изображение в полноэкранном режиме в полном разрешении и поддерживает салфетки для изменения фотографии. Я внедрил ViewPager после завершения этого урока: http://developer.android.com/training/displaying-bitmaps/display-bitmap.html. На моем Nexus 5 он работает хорошо для снимков экрана и фотографии передней камеры, но когда мне нужно прокрутить назад фотографию камеры, есть огромный лаг (эта фотография составляет около 2 МБ). Это не проблема, когда пользователь немного подошел, когда изображение загружается, а затем просматривает его, но это перебои с таким отставанием. В приложении Google Apps нет ошибок при просмотре этих фотографий.Галерея ViewPager прокрутка гладкая

ответ

0

Вы загружаете изображение 2MB из нити пользовательского интерфейса. Вы должны попытаться предварительно загрузить следующий/предыдущий растровый рисунок в фоновом потоке и загрузить его. Это класс загрузки битмапа, который я использую в фоновом режиме.

private class LoadBitmapData extends AsyncTask<String, Object, Bitmap> { 

     private Bitmap pictureBitmap; 
     private ILoadBitmapData delegate; 
     private double maximumWidth = 1024; 

     public LoadBitmapData(ILoadBitmapData del){ 
      this.delegate = del; 
     } 

     protected Bitmap doInBackground(String... path){ 

      try{ 

       pictureBitmap = BitmapFactory.decodeFile(path[0]); 

       //make sure we don't load a tremendously huge picture and crash the app. 
       if(pictureBitmap.getWidth() > 6000){ 
        double desiredWidth = maximumWidth ; 
        int nh = (int) (pictureBitmap.getHeight() * (desiredWidth/pictureBitmap.getWidth())); 
        pictureBitmap = Bitmap.createScaledBitmap(pictureBitmap, 1024, nh, true); 
       } 
      } catch (Exception e) { 
       Log.e("Error", e.getMessage()); 
       e.printStackTrace(); 
      } 

      return pictureBitmap ; 
     } 

     @Override 
     public void onPostExecute(Bitmap pictureBitmap){ 
      delegate.assignBitmap(pictureBitmap); 
     } 


    } 
+0

Нет, я использую AsyncTask, и у меня проблемы с ним. – encrypt

Смежные вопросы