android写代码截屏微信,微信等头像截取的实现 - 拉风的道长_Android之路 - OSCHINA - 中文开源技术交流社区...
逛论坛看到别人有这个需求,自己也是打酱油,就写了一把。
界面如下:
主要有一个半透明的矩形框,用作截取区域。一个ok按钮,确定截取。一个图片控件,显示图片。
功能需求:
1.多点放大缩小图片;
2.移动图片;
3.提供预览。
我一开始的思路是这样的:
用户放大缩小图片时,记住缩放比例,然后确定时,按照比例来截图。但是有个问题:如何确定是哪块处于半透明框中?因为可以移动图片的。这就不好计算了。
后来想到一个简单的方法:
用户放大或缩小图片之后,点OK时,截取屏幕的截图。然后再计算出半透明矩形框的位置,截图。这样就避免了繁琐的计算来确定截图位置。
实现过程:
1.截取屏幕图像:
// 获取Activity的截屏,this指向一个activity
private Bitmap takeScreenShot()
{
View view = this.getWindow().getDecorView();
view.setDrawingCacheEnabled(true);
view.buildDrawingCache();
return view.getDrawingCache();
}
2.获取状态栏、标题栏的高度
int statusBarHeight = 0;
int titleBarHeight = 0;
private void getBarHeight()
{
// 获取状态栏高度
Rect frame = new Rect();
this.getWindow().getDecorView().getWindowVisibleDisplayFrame(frame);
statusBarHeight = frame.top;
int contenttop = this.getWindow()
.findViewById(Window.ID_ANDROID_CONTENT).getTop();
// statusBarHeight是上面所求的状态栏的高度
titleBarHeight = contenttop - statusBarHeight;
}
3.多点缩放图片
4.创建半透明矩形区域
继承view,自绘。
@Override
protected void onDraw(Canvas canvas)
{
super.onDraw(canvas);
/*这里就是绘制矩形区域*/
int width = this.getWidth();
int height = this.getHeight();
Paint paint = new Paint();
paint.setColor(0xaa000000);
//top
canvas.drawRect(0, 0, width, height/3, paint);
//left
canvas.drawRect(0, height/3, (width - height/3)/2, height*2/3, paint);
//right
canvas.drawRect((width + height/3)/2, height/3, width , height*2/3, paint);
//bottom
canvas.drawRect(0, height*2/3, width, height, paint);
}
5. 截取图片
/*获取矩形区域内的截图*/
private Bitmap getBitmap()
{
getBarHeight();
Bitmap screenShoot = takeScreenShot();
clipview = (ClipView)this.findViewById(R.id.clipview);
int width = clipview.getWidth();
int height = clipview.getHeight();
Bitmap finalBitmap = Bitmap.createBitmap(screenShoot,
(width - height / 3) / 2, height / 3 + titleBarHeight + statusBarHeight, height / 3, height / 3);
return finalBitmap;
}
这些就是技术点了。其他的没有什么的。
重要的是想法。
源代码怎么添加??郁闷了。。。
android写代码截屏微信,微信等头像截取的实现 - 拉风的道长_Android之路 - OSCHINA - 中文开源技术交流社区...相关推荐
- android写代码截屏微信,android 模仿微信头像裁剪
android 在android开发中经常会碰到修改头像的功能需求, 而在修改头像>中最难的部分就是在头像的裁剪功能.虽说网上一大堆裁剪的例子,但最重要的是要理解里面的实现原理,这样以后自己改起 ...
- mac电脑投屏到小米盒子_电脑投屏到小米盒子 - thomas_more的个人空间 - OSCHINA - 中文开源技术交流社区...
无线显示技术 WiDi,需要英特尔Centrino Advanced-N 6200/6300/1000的无线网卡支持和显示适配器支持,在没有wifi网络的环境下可实现无限显示技术 无线投屏技术 Air ...
- 在单链表写入一组数据代码_第5章 第1节 链表 - osc_x8s7voop的个人空间 - OSCHINA - 中文开源技术交流社区...
● 请你说出几种基本的数据结构, 参考回答: 常见的基本的数据结构有链表.栈.队列.树(只列出面试常考的基本数据结构) 1.链表是一种物理存储单元上非连续.非顺序的存储结构,数据元素的逻辑顺序是通过链 ...
- php 小程序 运动步数_小程序同步微信步数 - xiangqian1的个人空间 - OSCHINA - 中文开源技术交流社区...
小程序获取微信运动步数,咱们看文档:https://developers.weixin.qq.com/miniprogram/dev/api/open-api/werun/wx.getWeRunDat ...
- 卡券php小程序,微信小程序领取卡券 - osc_88a08cel的个人空间 - OSCHINA - 中文开源技术交流社区...
微信小程序领取卡券 标签(空格分隔): php 开发前需要准备的工作 1 小程序和公众号要有绑定 2 小程序和该公众号要绑定到同一个开发平台下 [https://open.weixin.qq.com/ ...
- 微信步数C语言程序,获取微信步数 - osc_1v2pb1nt的个人空间 - OSCHINA - 中文开源技术交流社区...
const util = require('../../utils/util.js') Page({ /** * 页面的初始数据 */ data: { runData:[], }, /** * 生命周 ...
- php微信公众号无限制群发,微信公众号无限群发 - viki_php的个人空间 - OSCHINA - 中文开源技术交流社区...
/* Author:yf 使用说明:微信公众号无线群发接口,使用实例: $test = new SendAllMsg("你的appId","你的appSecret&quo ...
- java构造函数重载继承_Java基础-继承 - 写代码换盆的个人空间 - OSCHINA - 中文开源技术交流社区...
访问权限 Java 中有三个访问权限修饰符:private.protected 以及 public,如果不加访问修饰符,表示包级可见. 可以对类或类中的成员(字段和方法)加上访问修饰符. 类可见表示其 ...
- 小微商户申请php,微信小微商户申请入驻 - osc_r8q2esik的个人空间 - OSCHINA - 中文开源技术交流社区...
public static string ApplyEnter(string Data) { if (string.IsNullOrWhiteSpace(Data)) return ProtocolM ...
- linux 输入法框架,常用输入法框架简介 - 微信公众号:算法与编程之美 - OSCHINA - 中文开源技术交流社区...
前言 之前使用的一直都是ibus-sunpinyin中文输入法,但在使用的过程中发现很多的词组都找不到,比较麻烦,所以打算换一下ibus-googlepinyin输入法,还没用,也不知道具体的效果怎么 ...
最新文章
- python tkinter库、添加gui界面_使用Python中tkinter库简单gui界面制作及打包成exe的操作方法(二)...
- 长连接、短连接、短轮询、长轮询
- .net数据根据字段进行分类(linq语句)
- 丢人现眼……GitHub阿波罗11号代码仓库惨遭中文灌水
- NLTK基础教程学习笔记(一)
- DLNg[结构化ML项目]第二周迁移学习+多任务学习
- 使用MyBatis集成阿里巴巴druid连接池(不使用spring)
- Linux:分享50个实用的基础命令,欢迎收藏!
- 【ArcGIS遇上Python】使用add-in向导开发ArcGIS插件(1):add-in工具介绍及安装
- 扫雷游戏(洛谷P2670题题解,Java语言描述)
- 分享:MySQL 学习笔记(三)
- 小米不加入鸿蒙,是华为不给小米用鸿蒙,还是小米拒绝使用鸿蒙?
- 流量和延迟减半!挑战 TiDB 跨数据中心难题
- Linux系统下如何运行.sh文件
- model.load_state_dict(checkpoint[‘state_dict‘]) KeyError: ‘state_dict‘
- 电脑管家下载|腾讯电脑管家下载
- 嵌入式:ARM相关开发工具概述
- 企业对接Walmart平台常见报错
- JS实现视频录制-以Cesium为例
- java 捕获sigkill,如何杀死由kill或kill -9上的脚本启动的进程生成的所有子进程
热门文章
- Linux下qt程序部署到ARM开发板上: error: Upload of file “你的程序“ failed. The server said: “Failure
- CDR安装包下载+汉化简体中文版+安装教程
- JavaScript如何打开和使用JavaScript控制台
- 不花冤枉钱就能回家 --- 程序员教你如何高效抢票
- Android签名工具 AndroidMultitool使用方法
- 上传图片的方法(大白话讲解)
- 如何判断一个PCIe的capability是哪个capability
- 短按SOS键实现开始与停止白光LED灯闪烁状态
- 后缀数组(Suffix Array )
- 关于全国信息安全作品赛的了解