试图拍摄视图及其子项的屏幕截图

时间:2012-12-12 20:35:18

标签: android android-canvas

我有一个名为rel的相对布局,可以像这样动态添加一个imageview:

     rel.setBackgroundResource(R.drawable.bg_share_one);

                RelativeLayout.LayoutParams p1 = new RelativeLayout.LayoutParams(921, 691);
                p1.leftMargin = 30;
                p1.topMargin = 30;

                ImageView img = new ImageView(this);
                img.setLayoutParams(p1);
                myBitmap = BitmapFactory.decodeFile(files[0].getAbsolutePath(), option1);
                img.setImageBitmap(myBitmap);

                rel.addView(img);
                saveCompareImage();

然后我调用此方法拍摄相对布局的屏幕截图,但它添加的图像视图未显示在位图中:

 protected void saveCompareImage() {
    // TODO Auto-generated method stub

    rel.setDrawingCacheEnabled(true);
    try {

        File file = new File("/sdcard/LC/compare.jpg");
        file.createNewFile();
        Bitmap bm = rel.getDrawingCache();
        FileOutputStream ostream = new FileOutputStream(file);
        bm.compress(Bitmap.CompressFormat.JPEG, 80, ostream);
        ostream.close();
    } catch (Exception e) {
        e.printStackTrace();
    }
}

2 个答案:

答案 0 :(得分:1)

也许你启用了硬件加速? setDrawingCacheEnabled()的文档说明在这种情况下渲染的方式不同:

  

启用硬件加速后,启用绘图缓存   对渲染没有影响,因为系统使用不同的   忽略旗帜的加速机制。如果你想使用   视图的位图,即使启用了硬件加速,请参阅   setLayerType(int,android.graphics.Paint)有关如何使用的信息   启用软件和硬件层。

尝试setLayerType(LAYER_TYPE_SOFTWARE, null)或其他内容。

答案 1 :(得分:0)

问题不是要求措施:这有效:

protected void saveCompareImage() {
    // TODO Auto-generated method stub

    rel.setDrawingCacheEnabled(true);

    try {
        File file = new File("/sdcard/LC/compare.jpg");
        file.createNewFile();   
        Bitmap bitmap;
        rel.setDrawingCacheEnabled(true);
        rel.measure(MeasureSpec.makeMeasureSpec(rel.getLayoutParams().width, MeasureSpec.EXACTLY),
                MeasureSpec.makeMeasureSpec(rel.getLayoutParams().height, MeasureSpec.EXACTLY));
        rel.layout(0, 0, rel.getMeasuredWidth(), rel.getMeasuredHeight());

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


        FileOutputStream ostream = new FileOutputStream(file);
        bitmap.compress(Bitmap.CompressFormat.JPEG, 100, ostream);
        ostream.close();
    } catch (Exception e) {
        Log.v("ERRRO","e:"+e);
    }
}