`

安卓实现自定义区域截屏

阅读更多

该文章属于原创,转载注明出处: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平台上,自定义区域截图是一项实用且常见的功能,它允许用户自由选择屏幕上的特定区域进行截图,而非全屏截图。实现这一功能涉及到对Android系统的理解、View的层级结构以及图像处理技术。以下是对该主题的...

    Android实现指定区域截屏

    在Android平台上,实现指定区域截屏是一项常见的需求,尤其对于开发者来说,可能需要对特定的UI元素进行截图测试或者创建自定义的分享功能。本文将详细介绍如何在Android中实现这一功能,包括理解屏幕截图的基本原理...

    android 指定屏幕内区域截图

    在本文中,我们将深入探讨如何在Android中实现这一功能,包括如何选取特定布局,进行截图,并将截图保存至本地。 首先,我们需要了解Android中的截图原理。在Android系统中,我们可以获取到设备的root窗口...

    Android区域截屏

    在Android系统中,区域截屏是一项非常实用的功能,它允许...综上所述,Android区域截屏是通过捕获屏幕快照、创建浮动窗口和裁剪截图等一系列步骤实现的。无论是用户还是开发者,都能从中受益,提高截图的效率和实用性。

    Android实现矩形区域截屏的方法

    对屏幕进行截屏并裁剪有两种方式:早截图和晚截图。早截图,就是先截取全屏,再让用户对截取到的图片进行修改;与之相对的,晚截图,就是先让用户在屏幕上划好区域,再进行截图和裁剪。其实两者并没有什么太大的区别...

    安卓Android源码——区域截图源码.zip

    这个“安卓Android源码——区域截图源码.zip”压缩包提供了一个实现这一功能的源码示例。下面我们将深入探讨相关的知识点。 首先,我们要了解Android系统中的截图机制。在Android中,基本的截图操作可以通过调用`...

    Android 区域截图源码

    在Android平台上,实现区域截图是一项常见的需求,例如用于制作教程、分享屏幕内容或者...通过深入研究这个"Android区域截图源码",开发者可以学习到如何在Android系统中自定义截图行为,进一步提升自己的技能水平。

    Android源码——区域截图源码.7z

    "Android源码——区域截图源码.7z"这个压缩包文件很可能包含了一段实现自定义区域截图功能的源代码。区域截图是指用户可以自由选择屏幕上的任意部分进行截图,而不仅仅局限于全屏截图。在Android开发中,实现这一...

    Android 区域截图源码.rar

    在Android平台上,实现区域截图是一项常见的需求,例如用于制作教程、分享应用界面或者进行测试报告。这个名为"Android 区域截图源码.rar"的压缩包包含了一个实现这一功能的源代码示例。通过分析其内容,我们可以...

    android区域性屏幕截图

    这个“android区域性屏幕截图”项目提供了解决此类需求的代码实现,已经经过测试并确认功能正常。 在Android中,获取屏幕截图通常涉及到以下几个关键知识点: 1. **获取屏幕大小**: 在Android中,我们可以通过`...

    Android源码——区域截图源码.zip

    这个"Android 区域截图源码"应该提供了上述功能的实现细节,对于想要学习如何在Android应用中实现自定义截图功能的开发者来说,是一个宝贵的资源。通过阅读和理解这个源码,开发者可以掌握到Android图形绘制、事件...

    Android 区域截图源码.zip项目安卓应用源码下载

    在Android平台上,实现区域截图是一项常见的需求,尤其对于开发者来说,理解其原理并能自定义实现是非常有价值的技能。本项目提供了Android区域截图的源码,适用于不同场景的应用,包括学生毕业设计、个人学习以及...

    Android代码-区域截图源码.zip

    在Android平台上,实现区域截图是一项常见的需求,例如用于制作应用教程、分享屏幕内容或进行测试。这个名为"Android代码-区域截图源码.zip"的压缩包文件提供了一段实现这一功能的源代码。下面,我们将深入探讨...

    自定义截图控件

    拖动标记截取区域,可移动截图区域和缩放截图区域,将文件导入项目,在xml中引用即可

    android 截图 可手动选截取部分

    为了满足用户对自定义截图的需求,Android提供了多种方法来实现手动选择截取部分的功能。下面将详细探讨这一主题。 1. **第三方应用截图工具**: 许多第三方应用如“Screenshot Easy”、“Super Screenshot”等...

    android摄像头扫描区域截图

    综上所述,实现"android摄像头扫描区域截图"涉及到的步骤和关键技术是多方面的,包括权限管理、相机操作、UI交互、图像处理和识别算法。在开发过程中,需要结合具体需求,灵活运用这些技术,以创建出高效、稳定且...

Global site tag (gtag.js) - Google Analytics