Android实现屏幕截图并保存截图到指定文件
更新时间:2018年10月26日 10:43:26 作者:zhangphil
这篇文章主要为大家详细介绍了Android实现屏幕截图并保存截取图片到指定文件,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
Android屏幕截图并保存截取屏幕的图片到指定文件,具体内容如下
注意要添加权限:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
完整代码:
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; } }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。
相关文章
Android RecyclerView多类型布局卡片解决方案
这篇文章主要介绍了Android RecyclerView多类型布局卡片解决方案,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧2019-03-03Android自定义View实现仿GitHub的提交活跃表格
这篇文章主要介绍了Android自定义View实现仿GitHub的提交活跃表格,非常不错,具有参考借鉴价值,需要的的朋友参考下吧2017-01-01Android tabLayout+recyclerView实现锚点定位的示例
这篇文章主要介绍了Android tabLayout+recyclerView实现锚点定位的示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧2018-08-08Android 使用URLConnection下载音频文件的方法
有时候我们会需要下载音频文件。这里提供一种思路,将在线音频文件通过流写到本地文件中。需要的朋友可以参考下2019-09-09Android 用HttpURLConnection访问网络的方法
下面小编就为大家分享一篇Android 用HttpURLConnection访问网络的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧2018-01-01Android 4.4.2 横屏应用隐藏状态栏和底部虚拟键的方法
这篇文章主要介绍了Android 4.4.2 横屏应用隐藏状态栏和底部虚拟键的方法,需要的朋友可以参考下2017-01-01
最新评论