ViewPager图库滚动流畅

时间:2015-12-02 01:28:02

标签: android bitmap

我正在制作某种应用程序,以全分辨率全屏显示图片,并支持滑动以更改照片。我完全按照本教程实现了ViewPager:http://developer.android.com/training/displaying-bitmaps/display-bitmap.html。在我的Nexus 5上,它适用于屏幕截图和前置摄像头的照片,但是当我需要滑动以支持相机的照片时,会有一个巨大的延迟(这张照片大约是2MB)。用户在加载图像时稍等一点并没有问题,但是有这种滞后就会中断。在谷歌应用程序照片中,刷这张照片没有错误。

1 个答案:

答案 0 :(得分:0)

您正在从UI线程加载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);
        }


    }