废话不多说,直接看代码。
截图工具类ScreenShotUtils.java
package com.zhoujp.screenshotdemo;import android.app.Activity;import android.graphics.Bitmap;import android.graphics.Rect;import android.view.View;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;/** * 截屏工具类 * Created by Administrator on 2017/2/10. */public class ScreenShotUtils { /** * 进行截取屏幕 * * @param pActivity * @return */ public static Bitmap takeScreenShot(Activity pActivity) { Bitmap bitmap = null; View view = pActivity.getWindow().getDecorView(); // 设置是否可以进行绘图缓存 view.setDrawingCacheEnabled(true); // 如果绘图缓存无法,强制构建绘图缓存 view.buildDrawingCache(); // 返回这个缓存视图 bitmap = view.getDrawingCache(); // 获取状态栏高度 Rect frame = new Rect(); // 测量屏幕宽和高 view.getWindowVisibleDisplayFrame(frame); int stautsHeight = frame.top; int width = pActivity.getWindowManager().getDefaultDisplay().getWidth(); int height = pActivity.getWindowManager().getDefaultDisplay().getHeight(); // 根据坐标点和需要的宽和高创建bitmap bitmap = Bitmap.createBitmap(bitmap, 0, stautsHeight, width, height - stautsHeight); return bitmap; } /** * 保存图片到sdcard中 * * @param pBitmap */ PRivate static boolean savePic(Bitmap pBitmap, String strName) { FileOutputStream fos = null; try { fos = new FileOutputStream(strName); if (null != fos) { pBitmap.compress(Bitmap.CompressFormat.PNG, 90, fos); fos.flush(); fos.close(); return true; } } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return false; } /** * 截图 * * @param pActivity * @return 截图并且保存sdcard成功返回true,否则返回false */ public static boolean shotBitmap(Activity pActivity) { return ScreenShotUtils.savePic(takeScreenShot(pActivity), "sdcard/" + System.currentTimeMillis() + ".png"); }}
然后直接在需要的地方进行调用就shotBitmap(Activity pActivity)方法就行,例如下面的代码,布局一个Button,点击Button进行截图,布局文件简单不再贴,
package com.zhoujp.screenshotdemo;import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import android.view.View;import android.widget.Button;import android.widget.Toast;/** * 实现截屏保存在sdcard中 */public class MainActivity extends AppCompatActivity { private Button btn; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); btn = (Button) findViewById(R.id.btn); btn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { boolean flag = ScreenShotUtils.shotBitmap(MainActivity.this); if (flag) { Toast.makeText(MainActivity.this, "截图成功", Toast.LENGTH_SHORT).show(); } else { Toast.makeText(MainActivity.this, "截图失败", Toast.LENGTH_SHORT).show(); } } }); }}
在此demo中,切记在清单文件中添加操作SD的权限,因为图片的保存涉及到对sd卡的操作。
本文转自:http://blog.csdn.net/developer_jiangQQ/article/details/12164239
新闻热点
疑难解答