首页 > 系统 > Android > 正文

Android实现截图功能

2019-11-09 14:58:09
字体:
来源:转载
供稿:网友

 废话不多说,直接看代码。

截图工具类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


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表