您的位置:首页 > 移动开发 > Android开发

Android实现截图功能

2017-02-10 14:57 369 查看
 废话不多说,直接看代码。

截图工具类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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息