2014-09-26 56 views
1

我有一個ViewPager和一個PagerAdapter,它從遠程服務器(通過它們的id)下載一些圖像並顯示出來。它幾乎完美地工作,除了從第一頁滑到第二頁時,它有點慢(如1秒),而之後的所有其他轉換都是正常的。這不是網絡問題,因爲即使在刷卡之前等待了很多,問題仍然存在。 任何想法爲什麼發生這種情況?PagerAdapter在第一次轉換時變慢

這裏是我的代碼:

public class SliderAdapter extends PagerAdapter{ 

private SliderActivity activity; 
private long[] imageIds; 
private LayoutInflater inflater; 
private List<Bitmap> images = new ArrayList<Bitmap>(); 

public SliderAdapter(Activity activity, 
     long[] imageIds) { 
    this.activity = (SliderActivity) activity; 
    this.imageIds = imageIds; 
    for (int i=0; i<imageIds.length; i++){ 
     new GetImageTask(imageIds[i]).execute(); 

    } 
} 

@Override 
public int getCount() { 
    return imageIds.length; 
} 

@Override 
public boolean isViewFromObject(View view, Object object) { 
    return view == ((View) object); 
} 

@Override 
public Object instantiateItem(ViewGroup container, int position) { 
    ImageView imgDisplay; 

    inflater = (LayoutInflater) activity 
      .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    View viewLayout = inflater.inflate(R.layout.layout_fullscreen_image, container, 
      false); 

    imgDisplay = (ImageView) viewLayout.findViewById(R.id.imgDisplay); 

    if (images.size()-1 >= position && images.get(position) != null) 
     imgDisplay.setImageBitmap(images.get(position)); 


    ((ViewPager) container).addView(viewLayout); 


    return viewLayout; 
} 

@Override 
public void destroyItem(ViewGroup container, int position, Object object) { 
    ((ViewPager) container).removeView((RelativeLayout) object); 

} 

@Override 
public int getItemPosition(Object object) { 
    return POSITION_NONE; 
} 

private class GetImageTask extends AsyncTask<Void, Void, Bitmap> { 

    private final String LOG_TAG = GetImageTask.class.getName(); 

    private Long id; 

    public GetImageTask(Long id) {   
     super(); 
     this.id = id; 
    } 

    @Override 
    protected Bitmap doInBackground(Void... params) { 

     //Download image code 
    } 

    @Override 
    protected void onPostExecute(Bitmap imgBmp) { 
     if (imgBmp!=null) { 

      images.add(imgBmp); 
      activity.adapter.notifyDataSetChanged(); 

     } 
    } 
} 

} 
+0

你的意思是加載第二頁需要時間,其餘頁面加載好嗎? – 2014-09-26 20:14:46

+0

是的。假設有3張圖片。 1-> 2是緩慢的,則2-> 3,3-> 2,2-> 1,1-> 2完美地工作。 – splinter123 2014-09-26 20:45:23

+0

這就好像第二頁「沒有準備好」,當我滑過它。我也嘗試切換到FragmentPagerAdapter並將圖片分成不同的片段,但仍然存在相同的問題。 – splinter123 2014-09-27 00:07:39

回答

1

最後,它是圖像的分辨率過大,這會導致緩慢而加載它們的問題。只需添加如下內容即可:

BitmapFactory.Options options = new BitmapFactory.Options(); 
options.inDensity = 5; 
options.inTargetDensity = 2; 
Bitmap imgBmp = BitmapFactory.decodeByteArray(imgArray, 0, 
       imgArray.length, options); 

解碼圖像時降低分辨率,viewpager突然變得平滑。