博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android 屏幕截图并用WindowManager显示
阅读量:6224 次
发布时间:2019-06-21

本文共 4142 字,大约阅读时间需要 13 分钟。

  hot3.png

  • Android屏幕截图,得到截图存储在SD卡上。

  • 所截取的图,实时显示在屏幕上。用户点击图片――消失;用户不点击,指定时间后――图片自动消失。

感性认识:

抛砖引玉,详见注释:

@Overridepublic void onClick(View v) {    switch (v.getId()) {    case R.id.about_me:        //获取屏幕        View targetView = mActivity.getWindow().getDecorView();        targetView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_FULLSCREEN);//截全屏        targetView.setDrawingCacheEnabled(true);        Bitmap fullBitmap = Bitmap.createBitmap(targetView.getDrawingCache());        /**获取状态栏高度        Rect frame = new Rect();        mActivity.getWindow().getDecorView().getWindowVisibleDisplayFrame(frame);        int statusBarHeight = frame.top;*/        DisplayMetrics dm = mActivity.getResources().getDisplayMetrics();        /** 去掉标题栏        Bitmap bitmap = Bitmap.createBitmap(fullBitmap, 0, statusBarHeight, dm.widthPixels, dm.heightPixels - statusBarHeight);        targetView.destroyDrawingCache();*/        OutputStream output = null;        try {            if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {                String sdPath = Environment.getExternalStorageDirectory().getPath();//sd卡路径                String pngPath = sdPath + "/Remind/";//截图存放路径                File pngDir = new File(pngPath);                if (!pngDir.exists()) {                    pngDir.mkdir();//make路径                }                String pngName = pngPath + System.currentTimeMillis() + ".png";                output = new FileOutputStream(pngName);                if (output != null) {                    fullBitmap.compress(Bitmap.CompressFormat.PNG, 100, output);//100%高清大图                    output.flush();                    output.close();                }                /** WindowManager */                LayoutInflater inflater = LayoutInflater.from(mActivity);                screenShot = inflater.inflate(R.layout.screen_shot, null);                wmManager =(WindowManager) mActivity.getSystemService(mActivity.WINDOW_SERVICE);                WindowManager.LayoutParams wmParams = new WindowManager.LayoutParams();                ImageView shotImg = (ImageView) screenShot.findViewById(R.id.screen_shot_img);                shotImg.setImageBitmap(targetView.getDrawingCache());            /**             *以下都是WindowManager.LayoutParams的相关属性             */               wmParams.type=WindowManager.LayoutParams.TYPE_PRIORITY_PHONE;   //这里是关键               wmParams.format=PixelFormat.RGBA_8888;               wmParams.flags=WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE                       | WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL;               wmParams.alpha = 0.8f; //透明度               //WindowManager位置               wmParams.width = dm.widthPixels * 1 / 2;               wmParams.height = dm.heightPixels * 1 / 2;               wmParams.x = dm.widthPixels * 1 / 2;               wmParams.y = - (dm.heightPixels * 1 / 5);             //添加View               wmManager.addView(screenShot, wmParams);               isRemoved = false;               //计时器                timer = new Timer();                //点击图片,消失。                shotImg.setOnClickListener(new OnClickListener() {                    @Override                    public void onClick(View arg0) {                        if (wmManager != null && !isRemoved) {                            wmManager.removeView(screenShot);                            isRemoved = true;                            if (timer != null) {                                timer.cancel();                            }                        }                    }                });                //定时任务,显示3秒后自动消失。                timer.schedule(new TimerTask() {                    @Override                    public void run() {                        if (wmManager != null && !isRemoved) {                            wmManager.removeView(screenShot);                            isRemoved = true;                        }                    }                }, 3000);            }        } catch (Exception e) {            e.printStackTrace();        }        break;    default:        break;    }}


本文出自 “” 博客,请务必保留此出处

转载于:https://my.oschina.net/lichen/blog/264915

你可能感兴趣的文章
C实现通用数据结构--单链表
查看>>
zookeeper适用场景:分布式锁实现
查看>>
grep命令參数及使用方法
查看>>
用Lighttpd做图片服务器
查看>>
mongoDB 索引
查看>>
Atitit.Gui控件and面板----数据库区-mssql 2008 权限 配置 报表查看成员
查看>>
【linux】学习4
查看>>
粉丝经济
查看>>
Unity手游之路<二>Java版服务端使用protostuff简化protobuf开发
查看>>
Ngui 五种点击事件实现方式及在3d场景中点透的情况
查看>>
JavaScript的基准测试-不服跑个分?
查看>>
iOS - 正则表达式判断邮箱、身份证..是否正确:
查看>>
[转]刷量那些事儿。刷子是如何刷量的?
查看>>
Rafy 领域实体框架 - 树型实体功能(自关联表)
查看>>
人人都是 DBA(V)SQL Server 数据库文件
查看>>
数据挖掘十大经典算法
查看>>
SQL Server调优系列进阶篇(查询优化器的运行方式)
查看>>
[AngularJS] Html ngSanitize, $sce
查看>>
XMLHttpRequest Level 2 使用指南
查看>>
JS阻止鼠标滚动
查看>>