0

我正在开发一个将绘图缓存保存为 image.png 的应用程序。我想每 2 秒保存一次图像,然后将其发送到我的服务器。

public static void getImagen(){
    mView.setDrawingCacheEnabled(true);
    mView.setDrawingCacheQuality(View.DRAWING_CACHE_QUALITY_HIGH);
    mBitmap = mView.getDrawingCache();
    String path = Environment.getExternalStorageDirectory().getAbsolutePath();
    File file = new File(path+"/signature.png");
    FileOutputStream ostream;
    try {
        file.createNewFile();
        ostream = new FileOutputStream(file);
        mBitmap.compress(CompressFormat.PNG, 100, ostream);
        ostream.flush();
        ostream.close();
        Log.w("LOGCAT", "La imagen se guardo con exito");

        //Toast.makeText(getActivity(), "image saved", 5000).show();
    } catch (Exception e) {
        e.printStackTrace();
        Log.w("LOGCAT", "No se pudo guardar la imagen...");

        //Toast.makeText(getActivity(), "error", 5000).show();
    }
    // mView.setDrawingCacheEnabled(false);
}

然后我在这里调用该方法(Frament 的 onCreate):

t = new Thread(){
        @Override
        public void run() {
            super.run();
            while(flag){

                Log.w("THREAD_LOG", "guardar");
                try {
                    getImagen();
                    sleep(2000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                    Log.w("THREAD_LOG", "Error: "+e.toString());
                }

            }
        }
    };

    t.start();

我在这一行得到了一个空指针异常mView.setDrawingCacheEnabled(true);

我的片段视图代码是下一个:

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    v = inflater.inflate(R.layout.fragment_b, container, false);
    referencias();


    return v;
}
4

1 回答 1

0

您可以获取装饰视图并将其保存,而不必使用您自己的视图。此外,绘图缓存有时可能会不一致,您应该只使用 draw 代替(因为它每 2 秒一次,性能差异可能非常小)。

您可以使用以下方法获取根视图:

ViewGroup mRootView = (ViewGroup) activity.getWindow().getDecorView();

然后您可以获取DrawingCache,并在其上使用Bitmap.Compress。

于 2014-07-07T15:55:05.497 回答