/**

* 截屏

*

* @param activity

* @return

*/

public static Bitmap activityShot(Activity activity) {

/*获取windows中最顶层的view*/

View view = activity.getWindow().getDecorView();

//允许当前窗口保存缓存信息

view.setDrawingCacheEnabled(true);

view.buildDrawingCache();

//获取状态栏高度

Rect rect = new Rect();

view.getWindowVisibleDisplayFrame(rect);

int statusBarHeight = rect.top;

WindowManager windowManager = activity.getWindowManager();

//获取屏幕宽和高

DisplayMetrics outMetrics = new DisplayMetrics();

windowManager.getDefaultDisplay().getMetrics(outMetrics);

int width = outMetrics.widthPixels;

int height = outMetrics.heightPixels;

//去掉状态栏

Bitmap bitmap = Bitmap.createBitmap(view.getDrawingCache(), 0, statusBarHeight, width, height - statusBarHeight);

//销毁缓存信息

view.destroyDrawingCache();

view.setDrawingCacheEnabled(false);

return bitmap;

}

2 截取scrollview

/**

* 截取scrollview的屏幕

* @param scrollView

* @return

*/

public static Bitmap getBitmapByView(ScrollView scrollView) {

int h = 0;

Bitmap bitmap = null;

// 获取listView实际高度

for (int i = 0; i < scrollView.getChildCount(); i++) {

h += scrollView.getChildAt(i).getHeight();

scrollView.getChildAt(i).setBackgroundResource(R.drawable.white_drawable);

}

// 创建对应大小的bitmap

bitmap = Bitmap.createBitmap(scrollView.getWidth(), h,

Bitmap.Config.ARGB_8888);

final Canvas canvas = new Canvas(bitmap);

scrollView.draw(canvas);

// 测试输出

FileOutputStream out = null;

try {

out = new FileOutputStream("/sdcard/screen_test.png");

} catch (FileNotFoundException e) {

e.printStackTrace();

}

try {

if (null != out) {

bitmap.compress(Bitmap.CompressFormat.PNG, 100, out);

out.flush();

out.close();

}

} catch (IOException e) {

// TODO: handle exception

}

return bitmap;

}

3 截取ListView的屏幕方法

/**

* 截图listview

* **/

public static Bitmap getbBitmap(ListView listView) {

int h = 0;

Bitmap bitmap = null;

// 获取listView实际高度

for (int i = 0; i < listView.getChildCount(); i++) {

h += listView.getChildAt(i).getHeight();

}

// 创建对应大小的bitmap

bitmap = Bitmap.createBitmap(listView.getWidth(), h,

Bitmap.Config.ARGB_8888);

final Canvas canvas = new Canvas(bitmap);

listView.draw(canvas);

// 测试输出

FileOutputStream out = null;

try {

out = new FileOutputStream("/sdcard/screen_test.png");

} catch (FileNotFoundException e) {

e.printStackTrace();

}

try {

if (null != out) {

bitmap.compress(Bitmap.CompressFormat.PNG, 100, out);

out.flush();

out.close();

}

} catch (IOException e) {

// TODO: handle exception

}

return bitmap;

}

4 截取线性布局或相对布局屏幕的方法

/**

* 截取RelativeLayout

**/

public static Bitmap getRelativeLayoutBitmap(RelativeLayout relativeLayout) {

int h = 0;

Bitmap bitmap;

for (int i = 0; i < relativeLayout.getChildCount(); i++) {

h += relativeLayout.getChildAt(i).getHeight();

}

// 创建对应大小的bitmap

bitmap = Bitmap.createBitmap(relativeLayout.getWidth(), h,

Bitmap.Config.ARGB_8888);

final Canvas canvas = new Canvas(bitmap);

relativeLayout.draw(canvas);

return bitmap;

}

/**

* 截取LinearLayout

**/

public static Bitmap getLinearLayoutBitmap(LinearLayout linearLayout) {

int h = 0;

Bitmap bitmap;

for (int i = 0; i < linearLayout.getChildCount(); i++) {

h += linearLayout.getChildAt(i).getHeight();

}

// 创建对应大小的bitmap

bitmap = Bitmap.createBitmap(linearLayout.getWidth(), h,

Bitmap.Config.ARGB_8888);

final Canvas canvas = new Canvas(bitmap);

linearLayout.draw(canvas);

return bitmap;

}

5 截取除了导航栏之外的整个屏幕

/**

* 截取除了导航栏之外的整个屏幕

*/

public static Bitmap screenShotWholeScreen(Activity activity) {

View dView = activity.getWindow().getDecorView();

dView.setDrawingCacheEnabled(true);

dView.buildDrawingCache();

Bitmap bitmap = Bitmap.createBitmap(dView.getDrawingCache());

return bitmap;

}

Android实现自定义曲线截屏,Android实现截屏和截长图功能的各种方法相关推荐

  1. Android实现截屏和截长图功能的各种方法

    微信好友或者朋友圈的分享,可以是普通的截图分享,也可以是截取长图的分享,甚至还会有需求让你拼上生成的二维码和logo图片,下面我们直接来看看这些方法的使用: 先说一下拼接三张不同的图片后有黑色背景的解 ...

  2. android 截长图 方法,Android实现截屏与截长图功能

    本文实例为大家分享了Android实现截屏与截长图功能展示的具体代码,供大家参考,具体内容如下 Demo在GitHub的地址:ScreenShoot 在Android开发中,有时候会遇到需要截屏分享到 ...

  3. Android实现截屏和截长图功能的几种方法

    一般情况下各种型号的手机都会有自带的截屏功能,也会有诸如"开关机键+音量键"的截屏快捷键,只要手机是亮屏状态,都会将手机屏幕的可视区域(包含状态栏)全部截取下来. 如果开发中想要调 ...

  4. Android 实现截屏和截长图功能的几种方法

    欢迎大家关注我的公众号:**牛角尖尖上起舞** 一般情况下各种型号的手机都会有自带的截屏功能,也会有诸如"开关机键+音量键"的截屏快捷键,只要手机是亮屏状态,都会将手机屏幕的可视区 ...

  5. android中最新webview的功能,Android WebView实现截长图功能

    本文实例为大家分享了Android实现截长图功能的具体代码,供大家参考,具体内容如下 先看看手机自带的长截屏功能:  机型: vivo x9 plus 大胆推测实现逻辑: 1:需要一个可以滚动的Vie ...

  6. android webview 图片居中,Android WebView实现截长图功能

    本文实例为大家分享了Android实现截长图功能的具体代码,供大家参考,具体内容如下 先看看手机自带的长截屏功能:  机型: vivo x9 plus 大胆推测实现逻辑: 1:需要一个可以滚动的Vie ...

  7. Android StaticLayout实现主流便签内容生成长图功能

    便签记事本是用户常用的一类手机软件,目前各大主流手机均自带此类的工具,并且功能逐渐完善,其中有一项功能--一键生成图片分享比较吸引眼球,尤其是有些社交app在分享动态时有字数限制,如果将要发的内容生成 ...

  8. 追求截图的极致-牛牛截图再添新成员-截长图功能

    很久没有写关于截图控件的文章了,借着这次截图控件新功能升级,向大家介绍一下牛牛截图! 大家知道,我们对于截图控件的功能性.易用性以及体验都有着非常高的要求,总结如下: 能力方面 我们支持多显示器.高清 ...

  9. 【Android】自定义theme解决进入app闪黑屏问题

    每次启动app时总会闪一下黑屏,时间很短,一闪而过但是还是可以看的很清楚,虽然不影响运行,但是用户体验性极差,效果如图. 初感觉是app加载的问题,网上查相关资料后,该问题出现还是跟Activity生 ...

最新文章

  1. Error: Invoke-customs are only supported starting with Android O (--min-api 26)
  2. Redhat 图形模式与命令行模式的切换
  3. HBase总结(十一)hbase Java API 介绍及使用示例
  4. Qt中的QPrintDialog
  5. 剑指Offer #04 重建二叉树(递归)
  6. 吴恩达 coursera ML 第十四课总结+作业答案
  7. c语言股票软件开发,一种使用Objcctivc语言开发的股票软件系统的制作方法
  8. 信创产业发展应不忘初心牢记使命
  9. 两数、三数、四数之和相关题目(Leetcode题解-Python语言)
  10. ExtJs2.0学习系列(3)--Ext.Window
  11. mysql abc_MySql ABC
  12. CentOS_6.x安装VNC_Server
  13. 陈计老师《代数不等式》p15例6的别证
  14. Hadoop(一) Centos7 下Hdoop 安装及伪分布式集群部署
  15. 如何免费将XPS转换为PDF格式
  16. HotKey学习总结
  17. 史记翻译-汉初三杰-张良-留侯世家第二十五
  18. 阶段三 JavaScript网页编程---js基础语法
  19. append()方法
  20. linux centos7 在线和离线安装字体

热门文章

  1. 使用IDEA 导出有依赖的jar包的具体方法
  2. matlab 将数据存为txt文件,怎么用matlab将数据存为txt文件
  3. 前端 json数据转txt文本并下载(前端自定义封装数据并下载文件)
  4. Ubuntu16.04LTS环境下搭建MQTT服务器以及QT实现MQTT客户端
  5. 毫米波雷达,智能照明+人体存在感应
  6. php循环求1到100偶数,用while循环计算打印2到100的偶数和的几种方法
  7. Installshield 打包安装包心得
  8. 创建型模式—工厂模式
  9. SVN回退到某版本的命令
  10. 多用户商城系统解决方案