该文章属于原创,转载注明出处:http://www.pm-road.com/index.php/2014/10/29/140/
安卓可以通过Bitmap对象可以实现对整个屏幕的截屏,同时也可以通过该类实现对局部屏幕的截屏,
其中的主要原理就是通过手指对屏幕的onTouch操作:如按下屏幕,在屏幕上移动 ,从屏幕上起来等;
而一般性的截图在截图过程中,选中的屏幕颜色会改变,所以该功能在选取过程中,为了方便看到选择的屏幕大小,我们也会改变屏幕的颜色;
根据思路,如果要在屏幕选择过程中,某个局部显示的屏幕颜色不同,我们需要在当前View里面加入一个View对象,
所以我们应该先写一个类:ScreenShotView.java 该类应该继续View对象,具体代码如下:
package com.titan_geo.view; import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.graphics.Rect; import android.view.View; public class ScreenShotView extends View { private int x;//手指按下去的x坐标 private int y;//手指按下去的y坐标 private int m;//手指弹起的x坐标 private int n;//手指弹起的的y坐标 private boolean sign;//是否可以进行截屏操作 private Paint paint;//将选取的屏幕画颜色 public ScreenShotView(Context context) { super(context); paint = new Paint(Paint.FILTER_BITMAP_FLAG); } @Override protected void onDraw(Canvas canvas) { if(sign){ paint.setColor(Color.TRANSPARENT);//白 }else{ paint.setColor(Color.RED);//将选取的屏幕设置成红色 paint.setAlpha(80);//透明度80 canvas.drawRect(new Rect(x, y, m, n), paint); } super.onDraw(canvas); } public void setSeat(int x,int y,int m,int n){ this.x = x; this.y = y; this.m = m; this.n = n; } public boolean isSign() { return sign; } public void setSign(boolean sign) { this.sign = sign; } }
该文章属于原创,转载注明出处:http://www.pm-road.com/index.php/2014/10/29/140/
然后在要截屏的activity中加入相应的代码:(比如说:MainActivity.java)
// 截图属性 private int screenshot_x;// 绘画开始的横坐标 private int screenshot_y;// 绘画开始的纵坐标 private int screenshot_m;// 绘画结束的横坐标 private int screenshot_n;// 绘画结束的纵坐标 private int screenshot_width;// 绘画的宽度 private int screenshot_height;// 绘画的高度 private Bitmap screenshot_bitmap;// 生成的位图 private ScreenShotView screenshotView;// 绘画选择区域 private String screenUrl; private Context context; private ImageView image1;//需要截图的图片 在此(MainActivity.java)的oncreate方法中增加如下代码: //将截屏的view 要放在该activity中 screenshotView= new ScreenShotView(this); image1 = (ImageView) findViewById(R.id.image1);//需要截屏的部分,可以是任何view对象 //声明一个对话框,提示可以开始截屏了 new AlertDialog.Builder(this) .setMessage(“选取屏幕开始截屏”) .setPositiveButton(“确定”,new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialoginterface,int i) { screenshotView.setSign(true);//当按下确定按钮时,将截屏中的方法设置为true if (myView.isSign()) { screenshotView.setSeat(0, 0, 0, 0); screenshotView.setSign(false); } else { screenshotView.setSign(true); } screenshotView.postInvalidate(); } }).show(); //将截屏的内容放在该activity中 this.addContentView(screenshotView, new LayoutParams( LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
然后对image1增加ontouch事件:
image1.setOnTouchListener(new ScreenShotListener());//声明一个内部类的事件
内部类代码如下:
class ScreenShotListener implements OnTouchListener { @Override public boolean onTouch(View v, MotionEvent event) { if (event.getAction() == MotionEvent.ACTION_DOWN) { screenshot_x = 0; screenshot_y = 0; screenshot_width = 0; screenshot_height = 0; screenshot_x = (int) event.getX(); screenshot_y = (int) event.getY(); } if (event.getAction() == MotionEvent.ACTION_MOVE) { screenshot_m = (int) event.getX(); screenshot_n = (int) event.getY(); screenshotView.setSeat(screenshot_x, screenshot_y, screenshot_m, screenshot_n); screenshotView.postInvalidate(); } if (event.getAction() == MotionEvent.ACTION_UP) { if (event.getX() > screenshot_x) { screenshot_width = (int) event.getX() – screenshot_x; } else { screenshot_width = (int) (screenshot_x – event.getX()); screenshot_x = (int) event.getX(); } if (event.getY() > screenshot_y) { screenshot_height = (int) event.getY() – screenshot_y; } else { screenshot_height = (int) (screenshot_y – event.getY()); screenshot_y = (int) event.getY(); } new AlertDialog.Builder(context) .setMessage(“确定截图”) .setPositiveButton(“确定”, new DialogInterface.OnClickListener() { public void onClick( DialogInterface dialoginterface, int i) { //截图完毕之后,会提示是否保存所需要的图片,如果点确定 ,则执行此方法 saveBitmap();//具体代码如下 } }).setNegativeButton(“取消”, null).show(); } if (screenshotView.isSign()) { return false; } else { return true; } } } /** * 保存位图 * * @param activity * @return */ private void saveBitmap() { View view = this.getWindow().getDecorView(); view.setDrawingCacheEnabled(true); view.buildDrawingCache(); screenshot_bitmap = view.getDrawingCache(); Rect frame = new Rect(); this.getWindow().getDecorView().getWindowVisibleDisplayFrame(frame); int toHeight = frame.top; screenshot_bitmap = Bitmap.createBitmap(screenshot_bitmap, screenshot_x, screenshot_y + 2 * toHeight, screenshot_width, screenshot_height); try { FileOutputStream fout = new FileOutputStream(screenUrl);//这里screenUrl是保存图片的路径 ,在这里需要声明一下,否则会报错 screenshot_bitmap.compress(Bitmap.CompressFormat.PNG, 100, fout); if(fout != null){ fout.close(); } } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } view.setDrawingCacheEnabled(false); }
代码完毕,该文章属于原创,转载注明出处:http://www.pm-road.com/index.php/2014/10/29/140/
相关推荐
Android 自定义区域截图实现 如有疏忽,欢迎指出。
Android实现手机屏幕的自定义区域的截屏,生成图片并且展示,并且保存到SD卡下。
网上找了很多屏幕截图的东西,这里指定截取屏幕一个LinerLayout中的内容。自动截图保存到本地。
对屏幕进行截屏并裁剪有两种方式:早截图和晚截图。早截图,就是先截取全屏,再让用户对截取到的图片进行修改;与之相对的,晚截图,就是先让用户在屏幕上划好区域,再进行截图和裁剪。其实两者并没有什么太大的区别...
拖动标记截取区域,可移动截图区域和缩放截图区域,将文件导入项目,在xml中引用即可
本文所需要实现的就是这样一种有逼格的效果: ...2:然后需要实现这个拖动的框框,该框框实现的功能有四点:拖动、扩大缩小、触摸时显示基准线、截图。 首先是布局设计image_details.xml: <?xml
对于不同的屏幕密度、不同的设备方向,不同的语言和区域,都会涉及到备选 drawable 资源,下面这篇文章主要给你大家介绍了关于Android自定义Drawable之在Drawable中部指定透明区域的相关资料,需要的朋友可以参考下
手持证件照的裁剪算法:根据图片方向进行裁剪) 屏幕适配:为了避免框框视图的frame超出视图范围,导致半透明黑色遮罩无法渲染maskLayer;框框视图的布局采取宽为屏幕宽度,高按照比例进行计算
Snipaste是一款简约实用的免费截图软件,它可以方便地在屏幕上截取任意区域,提供了多种截图模式,并且还支持自定义快捷键。该软件不仅是一个屏幕截图工具,在编辑和处理截图时也能为用户省去不少麻烦。 首先,...
Android SDKv2.1.0是适用于Android系统移动设备的矢量地图开发包,也是v2.0.0的升级版本。 v2.1.0,功能介绍: 地图展示:包括2D图、卫星图、3D图地图展示。 地图操作:提供平移、缩放、双指手势操作、底图旋转等...
软件除了录屏,还支持截屏、摄像头开启录制、gif录制、区域录制、显示点击操作,水印、画笔、变声等等许多丰富的功能,给大家的录制增添了更多特色之处! 小熊录屏除了上述给大家提及的各种录制功能外,还有一些其他...
60个Android开发精典案例 Android软件源码: 2-1(Activity生命周期) 3-1(Button与点击监听器) 3-10-1(列表之ArrayAdapter适配) 3-10-2(列表之SimpleAdapter适配) 3-11(Dialog对话框) 3-12-5(Activity跳转与操作) 3-12...
由于是手机只有频幕截图:实现后如下图所示:点击开启按钮,出现悬浮窗小球控件上面显示手机的可用内存百分比;当拖动小球时,小球变为Android图标;松开小球,小球依附在频幕两侧;点击小球,手机底部出现大窗体...
可自定义的可绘制对象交互区域的填充。 :NEW_button: 截屏 Gradle AndroidX: dependencies{ // e.g.:implementation 'com.xw.repo:xedittext-androidx:2.3.0' implementation ' ...
-区域截图、页面截图快捷键全搞定; -功能强大,创新性加入各种工具编辑截图; -支持全局快捷键,快速减掉。 安全隐私保护 -安全网址绿色认证; -恶意、钓鱼网站主动拦截; -隐私浏览窗口,历史记录不留痕; ...
1.优化截图控件,截图工具栏加入新功能。 2.解决个人信息卡和天气窗体显示后不会消失的问题。 3.各种细节BUG优化。 CC2013-9.5.1 1.解决贴边左右隐藏的BUG。 2.解决窗体点击事件不能触发的问题。 3.优化SkinButton...
4-10(可视区域) 4-11-1(Animation动画) 4-11-2-1(动态位图) 4-11-2-2(帧动画) 4-11-2-3(剪切图动画) 4-13(操作游戏主角) 4-14-1(矩形碰撞) 4-14-2(圆形碰撞) 4-14-4(多矩形碰撞) 4-14-5(Region碰撞检测) 4-15-1...
-区域截图、页面截图快捷键全搞定; -功能强大,创新性加入各种工具编辑截图; -支持全局快捷键,快速减掉。 安全隐私保护 -安全网址绿色认证; -恶意、钓鱼网站主动拦截; -隐私浏览窗口,历史记录不留痕; ...