java - 将 ViewGroup 捕获到图像文件中

标签 java android android-layout screen-capture

我有一个 ImageView 和两个 TextViews 的简单组合。我想让 TextViewsImageView 重叠,然后将组合保存为一个整体(例如 PNG)。

我知道我可以使用 FrameLayoutTextViews 叠加在 ImageView 上,我已经在这样做了。现在我想知道的是,如何将其导出为图像?

我阅读了有关使用 Canvas 的各种帖子。有没有一种方法可以将 FrameLayout 导出为 PNG 图像,或者我是否需要创建一个 Canvas ,添加 ImageViewTextViews,并将 Canvas 本身导出为 PNG?

提前谢谢你。

最佳答案

可以轻松完成吗?,是的

怎么做?

好吧,前几天我碰巧为此做了一个函数,它真的很简单(确保你有写入外部设备的权限)。您所要做的就是指定要将哪个 View (它也将包括所有 subview )“绘制”到 Bitmap 之后,您可以像您说的那样将其保存为文件,或者使用它在你的应用中的某个地方。

public void captureView(int viewId,String filename){
    //Find the view we are after
    View    view = (View) findViewById(viewId);
    //Create a Bitmap with the same dimensions 
    Bitmap image = Bitmap.createBitmap(view.getWidth(), 
                                       view.getHeight(), 
                                       Bitmap.Config.RGB_565);
    //Draw the view inside the Bitmap
    view.draw(new Canvas(image)); 

    //Store to sdcard
    try {
       String path = Environment.getExternalStorageDirectory().toString();
       File myFile = new File(path,filename);
       FileOutputStream out = new FileOutputStream(myFile);

       image.compress(Bitmap.CompressFormat.PNG, 90, out); //Output
    } catch (Exception e) {
       e.printStackTrace();
    }
}

注意 避免尝试在 onCreate 方法上执行此代码,因为您可能会在绘制 View 之前尝试获取 View 的宽度和高度因此会导致错误,因为位图的尺寸不能为 0。

它是按原样还是创建时捕获 View ?

一开始我不太确定,但经过一些测试后,似乎所见即所得,所以如果你有旋转或与发射时的原始配置不同的东西,它会在捕捉中反射(reflect)出来。这可能是也可能不是您所追求的,但这就是它所提供的。这是捕获的 LinearLayout 示例(没有屏幕截图或裁剪,只是直接从设备获取)。

view capture

关于java - 将 ViewGroup 捕获到图像文件中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10644526/

相关文章:

java - Jexcelapi 获取一列的行数

android - 如何在 MPAndroidChart 中禁用和更改 Yaxis 标签的颜色?

android - NestedScrollView 中的 GridLayout,为什么我的列会超出 View 空间?

android textview 没有正确包装

java - 检查 Cassandra 是否正常工作

java - 查找 Android 应用程序源代码中使用的 API 总数?

java - 在类中使用 getter/setter

android - 复选框应该像android中的单选按钮

java - 单击数字键盘上的 "Done"按钮时应用程序崩溃

android - 如果 View 在直接父 View 的边界之外进行动画处理,则 onTouchListener() 不响应