捕获比屏幕更大的整个滚动视图

时间:2014-06-02 04:05:29

标签: android bitmap scrollview screen-capture

主要问题是将整个滚动视图保存为位图图像,而不仅仅是屏幕上显示的内容。有没有办法保存整个滚动视图,如果是这样的话?

3 个答案:

答案 0 :(得分:2)

在ScrollView中创建RelativeLayout或LinearLayout以从布局中获取位图。

以这种方式组织:

public class ActivityA extends Activity {

LinearLayout PP_Ll;
Button btn_capture;

@Override
protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);
setContentView(R.layout.main);

PP_Ll = (RelativeLayout) findViewById(R.id.PP_Ll);
Button btn_capture= (Button) findViewById(R.id.btn_capture);

btn_capture.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {

        Bitmap bitmap = takeScreenshot();
        saveBitmap(bitmap);

        }
    });

public Bitmap takeScreenshot() {

    View rootView = getWindow().getDecorView().findViewById(R.id.PP_Ll);
    rootView.setDrawingCacheEnabled(true);
    return rootView.getDrawingCache();

}

public void saveBitmap(Bitmap bitmap) {

    String root = Environment.getExternalStorageDirectory().toString();
    File newDir = new File(root + "/Folder");
    newDir.mkdirs();
    Random gen = new Random();
    int n = 10000;
    n = gen.nextInt(n);
    String fotoname = "Photo-" + n + ".jpg";
    File file = new File(newDir, fotoname);
    if (file.exists())
        file.delete();
    try {
        FileOutputStream fos = new FileOutputStream(file);
        bitmap.compress(CompressFormat.JPEG, 100, fos);
        fos.flush();
        fos.close();
        Toast.makeText(getApplicationContext(),
                "Saved in folder: 'Folder'", Toast.LENGTH_SHORT).show();

    } catch (FileNotFoundException e) {
        Log.e("GREC", e.getMessage(), e);
    } catch (IOException e) {
        Log.e("GREC", e.getMessage(), e);
    }

}
}}

您的RelativeLayout将作为BitMap保存在某个目录中。祝你好运。

注意:您必须将您的imageview,textviews等插入到.xml文件中的RelativeLayout中,所有这些都可以进入屏幕截图。

答案 1 :(得分:0)

尝试以下代码: -

public static Bitmap loadBitmapFromView(View v, int width, int height) {
    Bitmap b = Bitmap.createBitmap(width , height, Bitmap.Config.ARGB_8888);                
    Canvas c = new Canvas(b);
    v.layout(0, 0, v.getLayoutParams().width, v.getLayoutParams().height);
    v.draw(c);
    return b;
}

见下面的链接

Take a screenshot of a whole View

答案 2 :(得分:-1)

可能的解决方案是,您可以创建一个大屏幕大小的模拟器,可能是10英寸,并在其上运行您的应用程序,如果您的列表视图适合屏幕,您可以拍摄它的屏幕截图。 / p>