Android屏幕截图并保存截取屏幕的图片到指定文件


注意要添加权限:


完整代码:

package zhangphil.test;import android.app.Activity;import android.content.Context;import android.content.res.Resources;import android.graphics.Bitmap;import android.os.Bundle;import android.os.Environment;import android.support.annotation.Nullable;import android.support.v7.app.AppCompatActivity;import android.util.DisplayMetrics;import android.view.View;import android.widget.Toast;import java.io.BufferedOutputStream;import java.io.File;import java.io.FileOutputStream;import java.io.IOException;import java.io.OutputStream;public class JavaActivity extends AppCompatActivity {    @Override    protected void onCreate(@Nullable Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.drawable_activity);        AppCompatActivity activity = this;        findViewById(R.id.button).setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                File file = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES), "zhangphil.jpg");                Bitmap bitmap = screenShot(activity);                try {                    if (!file.exists())                        file.createNewFile();                    boolean ret = save(bitmap, file, Bitmap.CompressFormat.JPEG, true);                    if (ret) {                        Toast.makeText(getApplicationContext(), "截图已保持至 " + file.getAbsolutePath(), Toast.LENGTH_SHORT).show();                    }                } catch (Exception e) {                    e.printStackTrace();                }            }        });    }    /**     * 保存图片到文件File。     *     * @param src     源图片     * @param file    要保存到的文件     * @param format  格式     * @param recycle 是否回收     * @return true 成功 false 失败     */    public static boolean save(Bitmap src, File file, Bitmap.CompressFormat format, boolean recycle) {        if (isEmptyBitmap(src))            return false;        OutputStream os;        boolean ret = false;        try {            os = new BufferedOutputStream(new FileOutputStream(file));            ret = src.compress(format, 100, os);            if (recycle && !src.isRecycled())                src.recycle();        } catch (IOException e) {            e.printStackTrace();        }        return ret;    }    /**     * 获取当前屏幕截图,不包含状态栏(Status Bar)。     *     * @param activity activity     * @return Bitmap     */    public static Bitmap screenShot(Activity activity) {        View view = activity.getWindow().getDecorView();        view.setDrawingCacheEnabled(true);        view.buildDrawingCache();        Bitmap bmp = view.getDrawingCache();        int statusBarHeight = getStatusBarHeight(activity);        int width = (int) getDeviceDisplaySize(activity)[0];        int height = (int) getDeviceDisplaySize(activity)[1];        Bitmap ret = Bitmap.createBitmap(bmp, 0, statusBarHeight, width, height - statusBarHeight);        view.destroyDrawingCache();        return ret;    }    public static float[] getDeviceDisplaySize(Context context) {        Resources resources = context.getResources();        DisplayMetrics dm = resources.getDisplayMetrics();        int width = dm.widthPixels;        int height = dm.heightPixels;        float[] size = new float[2];        size[0] = width;        size[1] = height;        return size;    }    public static int getStatusBarHeight(Context context) {        int height = 0;        int resourceId = context.getResources().getIdentifier("status_bar_height", "dimen", "android");        if (resourceId > 0) {            height = context.getResources().getDimensionPixelSize(resourceId);        }        return height;    }    /**     * Bitmap对象是否为空。     */    public static boolean isEmptyBitmap(Bitmap src) {        return src == null || src.getWidth() == 0 || src.getHeight() == 0;    }}

更多相关文章

  1. android上传图片至服务器
  2. Android(安卓)编译App报错 找不到android.support.annotation.Ke
  3. android用于打开各种文件的intent
  4. Android实现振动效果
  5. Android横竖屏切换问题
  6. Android编译系统详解(二)
  7. android studio3导入opencv4人脸识别例程安卓项目工程
  8. android(25)(android下实现多线程断点下载)
  9. 单独编译android模块

随机推荐

  1. Android(安卓)里的FrameBuffer
  2. Android(安卓)2D游戏引擎AndEngine快速入
  3. android实体类的Parcelable
  4. Android(安卓)JNI小实例
  5. Android(安卓)SharedPreferences详解
  6. AndroidManifest中original-package标签
  7. 第五章 以数据为中心—数据存取(2)
  8. 无所不能的Android(安卓)手机
  9. Android开机自启动。
  10. Android(安卓)项目中遇到的问题