Android getDecorView用途——屏幕截图

正好做类似UCweb一样的页面管理的功能模块,贴出一起研究
  ImageView iv = (ImageView) findViewById(R.id.ImageView01);
  ImageView iv2 = (ImageView) findViewById(R.id.ImageView02);
  ImageView iv3 = (ImageView) findViewById(R.id.ImageView03);
  //draw的方式对整屏截取,但状态栏为黑色,不过可以通过canvas的translate方法根据状态
//栏的高度进行调整
  View cv = getWindow().getDecorView();
  Bitmap b = Bitmap.createBitmap(200, 200, Bitmap.Config.RGB_565);
  cv.draw(new Canvas(b));
  iv.setImageBitmap(b);
  //对隐藏的未画过的控件,截出的是黑色
  Bitmap image = Bitmap.createBitmap(200, 200, Bitmap.Config.RGB_565);
  bt3.draw(new Canvas(image));
  iv2.setImageBitmap(image);
  //也可以通过getDrawingCache获取
  bt4.setDrawingCacheEnabled(true);
  Bitmap bitmap = bt4.getDrawingCache();
  Drawable drawable = (Drawable) new BitmapDrawable(bitmap);
  iv3.setBackgroundDrawable(drawable);

  1.获取状态栏高度:
  decorView是window中的最顶层view,可以从window中获取到decorView,然后decorView有个getWindowVisibleDisplayFrame方法可以获取到程序显示的区域,包括标题栏,但不包括状态栏。
  于是,我们就可以算出状态栏的高度了。
  Java代码  
Rect frame = new Rect();
  getWindow().getDecorView().getWindowVisibleDisplayFrame(frame);

  int statusBarHeight = frame.top;

  Rect frame = new Rect();

  getWindow().getDecorView().getWindowVisibleDisplayFrame(frame);

  int statusBarHeight = frame.top;

  2.获取标题栏高度:

  getWindow().findViewById(Window.ID_ANDROID_CONTENT)这个方法获取到的view就是程序不包括标题栏的部分,然后就可以知道标题栏的高度了。

  Java代码
  int contentTop = getWindow().findViewById(Window.ID_ANDROID_CONTENT).getTop();

  //statusBarHeight是上面所求的状态栏的高度

  int titleBarHeight = contentTop - statusBarHeight

  int contentTop = getWindow().findViewById(Window.ID_ANDROID_CONTENT).getTop();

  //statusBarHeight是上面所求的状态栏的高度

  int titleBarHeight = contentTop - statusBarHeight

时间: 2024-08-03 07:14:07

Android getDecorView用途——屏幕截图的相关文章

《Android应用开发攻略》——1.13 从模拟器/Android设备获得屏幕截图

1.13 从模拟器/Android设备获得屏幕截图 Rachee Singh1.13.1 问题 你希望获得Android设备上运行的应用程序的屏幕截图.1.13.2 解决方案 使用Eclipse中Dalvik Debug Monitor Server(DDMS)视图的设备屏幕捕捉功能.1.13.3 讨论 按照如下步骤使用设备屏幕捕捉功能: 1 . 在Eclipse中运行应用程序,并转到DDMS视图(Window(窗口)菜单→Open Perspective(打开视图)→Other(其他)→DDM

《Android应用开发攻略》——导读

前言 对于蜂窝技术和移动计算来说,Android是"开放源码的革命",至少是革命的一部分.从已经不存在的Openmoko FreeRunner到QT Embedded.Moblin. LiMo. Debian Mobile,以及Maemo和最近刚刚开放源码的Symbian OS.刚刚消失的HP WebOS,人们对于提供开放源码的蜂窝技术已经做出了许多的尝试.我们也不要忘记闭源系统的忠实拥趸:BlackBerry OS.Apple iPhone和Microsoft Windows Mob

《Android游戏编程入门经典》——4.4节对比模拟器和Android设备

4.4 对比模拟器和Android设备 Android游戏编程入门经典 模拟器允许您在不同的Android操作系统上并以不同的屏幕分辨率测试程序,但是模拟器(之前称为Android虚拟设备或AVD)存在限制.即使在高端开发PC上,模拟器也很缓慢.现在,高端机器将拥有类似6核处理器(或者是服务器主板上有两个这样的处理器)和8GB或更多RAM的配置.AVD通常配有512MB或1GB的RAM.图4.19显示了AVD配置对话框,注意Hardware(硬件)列表底部的Device RAM Size(设备R

android-Android两个子线程同步问题

问题描述 Android两个子线程同步问题 现在Android端有这么一个需求,将Android的屏幕不停地截图然后通过Socket发送,现在希望能将截图和发送分为两个线程,有没有哪位能教教我啊,因为刚做Android没有多久,最好能有一个小Demo讲解一下,例如一边截图,一边保存的Demo,非常感谢; 解决方案 建立一个的消息队列做图片顺序控制和数据缓冲,截图线程截图后把截图(对象或者图片路径)从队尾插入,发送线程从队头取图片,队列满截图线程等待,队列空发送线程等待,设计的时候,应该根据设备的

Screen Shot It :截屏助手试用

ScreenShotIt是一款 Android平台的屏幕截图软件,软件操作简单,可以快速截屏并保存为JPG或PNG格式图像,支持重力感应截屏.程序名称:Screen Shot It平台:Android类型:截屏工具软件为初次使用的用户提供了操作向导,可以帮助用户快速掌握软件使用要点.软件主界面十分简单,用户可以设置截屏延迟时间.是否添加截屏快捷按钮到通知栏.开启或关闭重力感应截屏等.点击立刻截屏就可以在延迟时间后完成截屏.如设置延迟时间为10秒,点击立即截屏,软件会提示将在10秒钟后截取一张屏幕

Android中通过view方式获取当前Activity的屏幕截图实现方法_Android

此方法是通过view的方式获取当前activity的屏幕截图,并不是framebuffer的方式,所以有一定的局限性.但是这种方法相对简单,容易理解. 首先通过下面的函数获取Bitmap格式的屏幕截图: 复制代码 代码如下: public Bitmap myShot(Activity activity) { // 获取windows中最顶层的view View view = activity.getWindow().getDecorView(); view.buildDrawingCache()

Android中通过view方式获取当前Activity的屏幕截图实现方法

此方法是通过view的方式获取当前activity的屏幕截图,并不是framebuffer的方式,所以有一定的局限性.但是这种方法相对简单,容易理解. 首先通过下面的函数获取Bitmap格式的屏幕截图: 复制代码 代码如下: public Bitmap myShot(Activity activity) { // 获取windows中最顶层的view View view = activity.getWindow().getDecorView(); view.buildDrawingCache()

【ANDROID游戏开发之八】游戏中添加音频-详解MEDIAPLAYER与SOUNDPOO!并讲解两者的区别和游戏中的用途!

本站文章均为 李华明Himi 原创,转载务必在明显处注明:  转载自[黑米GameDev街区] 原文链接: http://www.himigame.com/android-game/312.html  ----------------------- 『很多童鞋说我的代码运行后,点击home或者back后会程序异常,如果你也这样遇到过,那么你肯定没有仔细读完Himi的博文,第十九篇Himi专门写了关于这些错误的原因和解决方法,这里我在博客都补充说明下,省的童鞋们总疑惑这一块:请点击下面联系进入阅读

Android中MimeType的用途

Android中MimeType的用途                 Intent-Filter中的<data>有一个mimeType . 它的作用是告诉Android系统本Activity可以处理的文件的类型.如设置为 "text/plain"表示可以处理".txt"文件. MimeTypeMap类                 MimeTypeMap类是专门处理mimeType的类. 类说明以及方法如下: Class Overview Two-w