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 编译App报错 找不到android.support.annotation.Keep的
  2. Android 编译提示R文件找不到
  3. 总结系列-Android的文件系统
  4. android:屏幕自适应
  5. Android JNI学习笔记——so文件动态加载
  6. Android APK 文件自动安装
  7. Android 屏幕实现上下翻转
  8. Android读写文件二

随机推荐

  1. android studio信鸽推送10004错误
  2. Android(安卓)APK JNI sample (JAVA JNI)
  3. android 新用户判定
  4. Android(安卓)签名和发布应用程序
  5. Android中使用Gesture加入手势操作
  6. android Bitmap类方法属性 详细说明
  7. android 调用系统自带的设置时间日期对话
  8. 【Android(安卓)开发教程】触发事件
  9. Android(安卓)命令行编译、打包生成apk文
  10. 从头学Android之多媒体--使用MediaRecord