Android截屏功能

        截取屏幕内容,并且将屏幕分享或者发送是非常常用的功能,本文将会实现截屏功能。截屏并保存成图像文件的基本步骤有:

        第一步:获取存储屏幕图像的Bitmap对象。

        第二步:获取状态栏高度。由于截屏无法获取状态栏图像,所以必须将状态栏从屏幕图像文件中去除,否则图像上方的状态栏位置会显示出一条白色区域。

        第三步:获取屏幕图像高度和宽度。

        第四步:建立新的Bitmap对象,将屏幕图像中除了状态栏部分的其他区域复制到该图像中。

        第五步:建立新的Bitmap对象保存到SD卡的根目录。

        以下是实现代码,整个界面中就一个按钮,它的单击属性设置成:android:onClick=“onClick_captureScreen”,即可,布局文件较简单,就不再列出,下面上主要代码。

package com.test.showsystemwindow;

import java.io.File;
import java.io.FileOutputStream;

import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.Point;
import android.graphics.Rect;
import android.os.Bundle;
import android.os.Environment;
import android.os.Handler;
import android.view.View;
import android.widget.Toast;

public class CaptureScreenActivity extends Activity {

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
	}

	public void onClick_captureScreen(View view) {
		// 本实例使用延时加载,以防止单击按钮时还没有抬起就截屏
		new Handler().postDelayed(new Runnable() {

			@Override
			public void run() {
				View v = getWindow().getDecorView();// 得到状态栏
				v.setDrawingCacheEnabled(true);
				v.buildDrawingCache();
				// 第一步,获取保存屏幕图像的Bitmap对象
				Bitmap srcBitmap = v.getDrawingCache();
				Rect frame = new Rect();
				getWindow().getDecorView().getWindowVisibleDisplayFrame(frame);
				// 第二步,获取状态栏的高度
				int statusBarHeight = frame.top;
				// 第三步,获取截屏图像的高度
				Point outSize = new Point();
				getWindowManager().getDefaultDisplay().getSize(outSize);
				int height = outSize.y;
				int width = outSize.x;
				// 第四步,创建新的BitMap对象,并截取除了状态栏以外的其他区域
				Bitmap bitmap = Bitmap.createBitmap(srcBitmap, 0,
						statusBarHeight, width, height - statusBarHeight);
				v.destroyDrawingCache();

				FileOutputStream fos = null;
				try {
					// 为了使每次保存图像的文件名不同,这里使用临时文件来生成相应的文件名
					File file = File.createTempFile("capture", ".jpg",
							new File(Environment.getExternalStorageDirectory().getAbsolutePath()));
					fos = new FileOutputStream(file);
					if (null != fos) {
						// 第五步,将截屏的图像保存到指定文件中
						bitmap.compress(Bitmap.CompressFormat.PNG, 90, fos);
						fos.flush();
						Toast.makeText(CaptureScreenActivity.this,
								"已经截屏成功,截屏文件名为:" + file.getName(),
								Toast.LENGTH_LONG).show();
					}
				} catch (Exception e) {
				}
			}
		}, 2000);// 延时两秒
	}
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值