如何每2秒保存一次绘图缓存



我正在开发一个将绘图缓存保存为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);
}

然后我在这里调用这个方法(fragment的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;
}

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

您可以使用以下命令获得根视图:

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

你可以然后getDrawingCache,并使用位图。

最新更新