Исключение нулевого указателя в Imageview.getDrawingCache во второй раз

            View vvv=mViewFlipper.getCurrentView();             
            RelativeLayout rrr=(RelativeLayout)vvv;
            ImageView img=(ImageView) rrr.getChildAt(0);
            img.setRotation(90); 

            img.setDrawingCacheEnabled(true);
            img.buildDrawingCache();                
            Bitmap bitmap =img.getDrawingCache();             
            img.destroyDrawingCache();
            img.setDrawingCacheEnabled(false);

            int width = bitmap.getWidth();
            int height = bitmap.getHeight();
            Matrix matrix = new Matrix();
            matrix.postRotate(90);
            Bitmap rotatedBitmap = Bitmap.createBitmap(bitmap, 0, 0, width, height, matrix, true);
            BitmapDrawable bmd = new BitmapDrawable(rotatedBitmap); 
            rrr.removeViewAt(0);
            ImageView img_new=new ImageView(ImageSlideShow.this);
            img_new.setImageDrawable(bmd);
            img_new.setScaleType(ScaleType.CENTER);
            rrr.addView(img_new, new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));

Я использовал код выше для поворота изображения в ViewFlipper,
Первый раз выполняется, но второй раз возвращается NullPointerException...
Строка ошибки:

Bitmap bitmap =Bitmap.createBitmap(img.getDrawingCache());

2 ответа

Решение

Привет, используйте этот код и, надеюсь, это работает

в основном ваше изображение является нулевым, поэтому сначала его

ImageView img= new ImageView();
img=(ImageView) rrr.getChildAt(0);
        img.setRotation(90); 

img.setDrawingCacheEnabled(true);
        img.buildDrawingCache(); 
if(img.isDrawingCacheEnabled()){               
        Bitmap bitmap =img.getDrawingCache(true);             
}img.destroyDrawingCache();
        img.setDrawingCacheEnabled(false);
ByteArrayOutputStream bao = new ByteArrayOutputStream();
        bitmap.compress(Bitmap.CompressFormat.JPEG, 100,
                                bao);

        int width = bitmap.getWidth();
        int height = bitmap.getHeight();
        Matrix matrix = new Matrix();
        matrix.postRotate(90);
        Bitmap rotatedBitmap = Bitmap.createBitmap(bitmap, 0, 0, width, height, matrix, true);
        BitmapDrawable bmd = new BitmapDrawable(rotatedBitmap); 
        rrr.removeViewAt(0);
        ImageView img_new=new ImageView(ImageSlideShow.this);
        img_new.setImageDrawable(bmd);
        img_new.setScaleType(ScaleType.CENTER);
        rrr.addView(img_new, new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));

У меня есть решение этой проблемы

ImageView img=(ImageView) rrr.getChildAt(0);            
                Matrix matrix = new Matrix(); 
                matrix.set(img.getImageMatrix());
                matrix.postRotate(90, img.getWidth() / 2, img.getHeight() / 2);
                img.setImageMatrix(matrix); 

Приведенный выше код завершает работу для поворота изображения, и вы должны установить android:scaleType="matrix" в вашем изображении.

Другие вопросы по тегам