Android View截图

2019-06-15  本文已影响0人  天青色等Y雨

\color{#000000}{之前项目中遇到打印问题:一个洗衣店洗衣项目,下单之后需要将所有}
\color{#000000}{衣物信息打印出来,一件衣物一张小票,App需要对每一件衣物生成一}
\color{#000000}{张衣物信息图片,然后传给后台打印。}
\color{#000000}{因为衣物信息很多,所以我用的HorizontalScrollView写的布局文件,}
\color{#000000}{具体步骤如下:}


\color{#000000}{1.要截图View的布局文件,因为下单之后直接截图,截图页面是不可见}
\color{#000000}{的,所以单独写的布局文件,根布局用的RelativeLayout}

\color{#000000}{2.在下单界面或者写个对话框,加载显示截图布局,获取控件,同时设置}
\color{#000000}{截图View根布局visibility属性为invisible}

\color{#000000}{3.截图拿到Bitmap对象(可保存成图片,可直接显示到ImageView),看}
\color{#000000}{个人需求,我这里直接展示到ImageView}

//这里注意几个地方:
//1. scrollView.post()方法是为了避免截图时获取View宽高为0,导致异常
//2.for循环改变控件显示的值,截图,整个代码放在scrollView.post()中,只能这样!!!
//3.scrollView.post()不能在for循环中操作(否则截图内容是一样的,控件显示改变无效)
//,因为执行顺序是先走for循环,循环走完之后再执行post中的代码N次
//4.因为我这里用的HorizontalScrollView,所以动态计算的宽度,如果竖直方向的ScrollView
// 需要动态计算高度
scrollView.post(new Runnable() {
            @Override
            public void run() {
                for (int i = 0; i < 3; i++) {
                    textView1.setText("亚太查勘移动定损哈哈哈哈哈---" + i);
                    textView2.setText("这种方案依然不够好,当Item足够多的时候---" + i);
                    textView3.setText("我们都知道,在新的Android版本中,已经可以用---" + i);
                    int w = 0;
                    Bitmap bitmap;
                    for (int j = 0; j < scrollView.getChildCount(); j++) {
                        w += scrollView.getChildAt(j).getWidth();
                    }
                    bitmap = Bitmap.createBitmap(w, scrollView.getHeight(), Bitmap.Config.RGB_565);
                    final Canvas canvas = new Canvas(bitmap);
                    scrollView.draw(canvas);
                    create(bitmap);
                }

            }
        });

//获取到截图的Bitmap,创建Imageview展示到当前界面
public void create(Bitmap bitmap) {
        ImageView imageView = new ImageView(this);
        LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT);
        params.setMargins(0, 15, 0, 0);
        imageView.setLayoutParams(params);
        imageView.setScaleType(ImageView.ScaleType.FIT_XY);
        imageView.setImageBitmap(bitmap);
        llImages.addView(imageView);
    }
上一篇 下一篇

猜你喜欢

热点阅读