如何在Android中截取垂直和水平布局的截图

时间:2014-03-09 00:11:52

标签: android screenshot horizontalscrollview

我有一个应用程序,显示数学练习的表格/矩阵。这张桌子可以很大,所以我使用垂直和水平布局。我需要截取整个布局的截图,但它只保存可见屏幕的截图。我该怎么办?

这是我的布局

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/myScrollView"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content" >

    <HorizontalScrollView
        android:id="@+id/myHorizontalScrollView"
        android:layout_width="wrap_content"
        android:layout_height="fill_parent" >

        <TableLayout
            android:id="@+id/myTableLayout"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:stretchColumns="1" />

    </HorizontalScrollView>
</ScrollView>

这是我截屏的方式,但只有可见的屏幕,而不是整个布局

View v1 = getWindow().getDecorView().getRootView();
v1.setDrawingCacheEnabled(true);
Bitmap myBitmap = v1.getDrawingCache();        
saveBitmap(myBitmap); // saves to storage

编辑:使用此代码,我可以获取非常宽的表的截图,但如果它也太高,应用程序崩溃并且它说:查看太大而无法适应绘图缓存,需要2030336字节,只有1536000可用。现在我不知道问题是我用来捕获视图的方法,或者根本不可能用例如20行和列捕获表。为什么位图如此之大?

TableLayout tableView = (TableLayout) findViewById(R.id.myTableLayout);
tableView.setDrawingCacheEnabled(true);
tableView.layout(0, 0, tableView.getWidth(), tableView.getHeight());
tableView.buildDrawingCache(true);
tableView.setBackgroundColor(Color.WHITE);
Bitmap bitmap = Bitmap.createBitmap(tableView.getDrawingCache());
tableView.setDrawingCacheEnabled(false);

1 个答案:

答案 0 :(得分:0)

这个怎么样? https://stackoverflow.com/a/16501007/2121682你的问题是一样的,但方法是不同的。我希望它有效。 可能你已经看过这个,但以防万一。