我有一个名为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();
}
}
答案 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);
}
}