1

DrawingCacheを使用していますが、NullPointerExceptionが発生します

私のコードは以下の通りです:

    myImageView.setDrawingCacheEnabled(true);

    myImageView.buildDrawingCache();
    resized = myImageView.getDrawingCache();        
    btnSave.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            String save_location = Environment
                    .getExternalStorageDirectory().getAbsolutePath()
                    + "/EditedImage";
            File dir = new File(save_location);
            if (!dir.exists())
                dir.mkdirs();
            File f = new File(dir, TEMP_PHOTO_FILE);
            FileOutputStream out;
            try {
                out = new FileOutputStream(f);
                resized.compress(Bitmap.CompressFormat.PNG, 90, out);

                out.flush();
                out.close();
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    });

エラーはonClickにあります。

私のlogcatは ここに画像の説明を入力してください これに欠けているものですか?

4

2 に答える 2

1

この例を試してください:

myImageView.setDrawingCacheEnabled(true);

myImageView.measure(MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED), 
            MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED));
myImageView.layout(0, 0, v.getMeasuredWidth(), myImageView.getMeasuredHeight()); 

myImageView.buildDrawingCache(true);


Bitmap b = Bitmap.createBitmap(myImageView.getDrawingCache());
myImageView.setDrawingCacheEnabled(false); // clear drawing cache

更新しました:

別の方法として、ビットマップの Canvas を作成してから、次のように view.draw(canvas) を呼び出すことができます。

 public static Bitmap loadBitmapFromView(View v) {
         Bitmap b = Bitmap.createBitmap( v.getLayoutParams().width, v.getLayoutParams().height,              Bitmap.Config.ARGB_8888);                


         Canvas c = new Canvas(b);
         v.layout(0, 0, v.getLayoutParams().width, v.getLayoutParams().height);
         v.draw(c);
         return b;
    }
于 2013-01-07T09:20:39.837 に答える
0

各ビューは、画面に描画される前に、測定やレイアウトなどの手順を実行します。したがって、Activity.onCreate() で getDrawingCache() を呼び出すと、ビューはまだ描画されていません。

onclick メソッドに次の 2 行を追加します。

myImageView.buildDrawingCache();
resized = myImageView.getDrawingCache();
于 2013-01-07T09:43:06.683 に答える