Android自己定义截屏功能,相似QQ截屏
由于公司业务需求 须要对一个屏幕进行截屏。但自带的截屏功能是远远不够项目的功能需求 ,我们是做一个画板软件 。须要的像QQ那样截屏之后 ,能够看到我们自己定义的工具。有画笔,button等等 。android自带的功能非常easy,仅仅须要Intent隐式调用就全然足够了。但他是系统的应用 ,界面固定。无法定制改动。实现方法跟办法有非常多种,以下记录下我实现的方法 。我是这样一个思路 ,重写一个View组件 ,在OnDraw里面仅仅负责不绘图形(包含半透明的四个矩形,亮框矩形,亮框上的四个小圆点),Ontouch方法是不停的去改动亮框
的坐标点。然后又一次绘制 。
效果图:
我是把这个图片分解成以下这个图的形状的。
我们在onTouch里面就不停地去绘制矩形跟圆点。
详细代码实现主要思路:
1、图片绘制方法:
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas); //不重写 图片无法出现
if(mBitmap!=null){
// drawNoLight(canvas);
canvas.drawBitmap(mBitmap, iconLeft , iconTop, p_picture) ;
//画高亮的边界
drawRect(canvas) ;
if(isDown)
drawCircle(canvas) ;
} }
2、图片坐标修改方法:
@Override
public boolean onTouchEvent(MotionEvent event) { int action = event.getAction() ;
float x = event.getX() ;
float y = event.getY() ;
switch (action) {
case MotionEvent.ACTION_DOWN:
startX = x ;
startY = y ;
//须要推断是在矩形的外边还是里面(推断是移动还是缩放)
if(x>lightRect.left+OFFSET && x<lightRect.right -OFFSET && y>lightRect.top+OFFSET && y<lightRect.bottom -OFFSET){
//是移动的状态
isMove = true ;
isScale = false ;
}else if(x<lightRect.left-OFFSET || y<lightRect.top-OFFSET || x>lightRect.right+OFFSET || y>lightRect.bottom+OFFSET){
isMove = false ;
isScale = false ;
}else {
isMove = false ;
isScale = true ; //缩放
point = getScalePoint(startX , startY);
}
if(!isScale)
isDown = false ;
break; case MotionEvent.ACTION_UP :
case MotionEvent.ACTION_CANCEL:
isDown = true ;
break ; case MotionEvent.ACTION_MOVE: if(isMove){
//移动
float dx = x - startX ;
float dy = y - startY ;
moveLightRect(dx , dy) ;
startX = x ;
startY = y ;
isDown = false ;
}
if(isScale){
float dx = x - startX ;
float dy = y - startY ;
resetLightRect(dx , dy) ;
startX = x ;
startY = y ;
} break ; default:
break;
}
invalidate() ;
return true;
}
3、图片截取的方法:
public Bitmap getBitmap (){
int x = (int)(lightRect.left - iconLeft) ;
int y = (int)(lightRect.top - iconTop) ;
int w = lightRect.right - lightRect.left ;
int h = lightRect.bottom - lightRect.top ;
Bitmap bitmap = Bitmap.createBitmap(mBitmap, x, y, w, h) ;
return bitmap ;
}
PS:这个仅仅是一个View 能够实现图片的截取,这时我们须要加一些自己定义的button进来。就使用一个布局文件 。把button布置进去 。举一个简单的样例:
<?xml version="1.0" encoding="utf-8"? >
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal" > <com.example.imagedemo.ImageTailor
android:id="@+id/tailor"
android:layout_width="match_parent"
android:layout_height="match_parent"
/> <LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="8dp"
android:layout_marginRight="8dp"
android:layout_gravity="bottom"
>
<Button
android:id="@+id/complete"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="right"
android:text="完毕"
/>
<Button
android:id="@+id/cancel"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="right"
android:text="取消"
/> </LinearLayout> </FrameLayout>
*:关键类和关键的方法我放在我的资源里,须要的朋友能够下载直接执行 看下效果。也能够看也这个Demo。 主要是ImageTailor.java这个类的实现 。有什么建议请大家提出来 ,共同学习。

Android自己定义截屏功能,相似QQ截屏的更多相关文章
- Android EditText 取消复制粘贴功能,取消横向全屏编辑功能(一)
在做一些安全性的软件时候常常要考虑取消 EditText 上的复制粘贴功能以确保安全性.下面就记录了这个方法: 首先在API-11以下的版本很简单,只需要在Xml布局文件或者用代码把长按属性设置成fa ...
- 小胖说事22-----iOS开发技巧之取消键盘响应和截屏功能
1.UILable内容模糊 在非Retina的iPad mini 的屏幕上,一个UILable的frame的origin值假设是有小数位(如0.5),就会造成显示模糊,所以不妨用整数值的origin. ...
- [置顶] Android 应用内禁止截屏功能的实现
截图介绍 Android的调试工具DDMS提供有截屏功能,很多软件也会有截屏功能,在做支付等安全类应用的时候,为了保证用户的资产和系统安全,往往会禁止应用内截屏,禁止之后,在此应用处于前台的情况下 ...
- Atitit截屏功能的设计解决方案
Atitit截屏功能的设计解决方案 自己实现.... 使用快捷键.. 弹出自己的win,,背景是屏幕快照 点击鼠标光标变成十字状态 出现截屏窗口调整截屏窗口位置与大小 释放鼠标,三个btn,, 复制 ...
- android4.3 截屏功能的尝试与失败分析
1.背景 上一篇讲了在源码中捕获到了android手机的截屏函数(同时按下电源键与音量减,详情http://blog.csdn.net/buptgshengod/article/details/199 ...
- (转载)Android项目实战(十七):QQ空间实现(二)—— 分享功能 / 弹出PopupWindow
Android项目实战(十七):QQ空间实现(二)—— 分享功能 / 弹出PopupWindow 这是一张QQ空间说说详情的截图. 分析: 1.点击右上角三个点的图标,在界面底部弹出一个区域,这个 ...
- Chrome截图截满滑动栏,QQ截长屏,录屏
1.Chrome截图截满滑动栏 一般我们截图都是用QQ的Ctrl+shift+A,但是网页不好截,这里我们可以用Chrome控制台来截全网页: F12或Ctrl+shift+i打开控制台: 点击一下控 ...
- PhantomJS linux系统下安装步骤及使用方法(网页截屏功能)
PhantomJS 是一个基于 WebKit 的服务器端 JavaScript API.它全面支持web而不需浏览器支持,其快速,原生支持各种Web标准: DOM 处理, CSS 选择器, JSON, ...
- 达到工业使用质量级别的类似于QQ截屏的软件
到网上查找截屏发现基本都是一些小孩子的初级玩意,功能强大一点的又没有源代码所以自己花了三四天时间写了一个能达到工业使用质量级别的截图控件. 优点:1.代码量小只有1500行代码 2.结构清晰简单极易于 ...
随机推荐
- Wifi模块的工作原理
http://www.wifitop1.com/news/content-98.html 在无线网络领域里面,无线wifi是最火的名词.对于串口wifi模块的工作是什么呢?串口wifi模块又有什么功能 ...
- 三分钟教你学Git (四)之紧急救助
假设你不小心git reset --hard HEAD^ 然后这个commit又没有在别的git仓库中,怎么办?是不是这次改动就丢了呢? 当然不是,git为我们每次都历史都保留了reference l ...
- linux里install命令和cp命令的区别
转:http://blog.yikuyiku.com/?p=2659 基本上,在Makefile里会用到install,其他地方会用cp命令. 它们完成同样的任务——拷贝文件,它们之间的区别主要如下: ...
- 体验NW.js打包一个桌面应用
1.安装nw,(也可在官网下载然后配置变量) npm install nw -g 一个最最简单的nw应用,只需要有index.html和package.json文件即可 2.项目准备,目录结构 app ...
- Mysql中DATE_SUB函数
在对数据查询或菜单时经常要对指定的时间或时间段进行查询,例如要查询一天内的信息,要查询一周内的信息,要查询一个月内的. 定义和用法 DATE_SUB() 函数从日期减去指定的时间间隔. 1.语法 DA ...
- 18 个最好的CSS框架用于提高开发效率
根据维基百科,CSS框架是事先准备好的库,是为了让使用层叠样式表语言来美化网页更容易,更符合标准.在这篇文章中,我们已经收集了一些现成的框架,这将使你减少你的任务流程和代码.我们希望你会发现列表中的方 ...
- MapReduce 编程模型概述
MapReduce 编程模型给出了其分布式编程方法,共分 5 个步骤:1) 迭代(iteration).遍历输入数据, 并将之解析成 key/value 对.2) 将输入 key/value 对映射( ...
- 【Linux】shell中svn报错:svn: Can't convert string from 'UTF-8' to native encoding:xxx
解决办法: shell中svn命令之前添加: #!/bin/bash export LC_ALL=en_US.UTF- export LANG=en_US.UTF- export LANGUAGE=e ...
- Sqlserver DateTime转换成SMALLDATETIME时“产生一个超出范围的值”
工作中遇到一个问题,A表中字段(DateTime1)的数据类型为DateTime,新建了一张表B的SMALLDATETIME1字段的数据来自A表的DateTime1 但在将A表字段DateTime1导 ...
- 为大家推荐一款很不错的MarkDown编辑器——stackEdit
自己细致体验了一下下:认为它还是很不错的! !! https://stackedit.io 这是它的官网,我们能够在chrome浏览器的"应用"里找到相应的插件. ps:它但是一款 ...