如何每2秒保存一次图形缓存?

时间:2014-07-07 15:47:09

标签: android multithreading fragment drawingcache

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

1 个答案:

答案 0 :(得分:0)

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

您可以使用以下方式获取rootview:

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

然后你可以使用getDrawingCache,并在其上使用Bitmap.Compress。