android实现截屏操作
16lz
2021-01-25
最近开发了一些Android小游戏,想在游戏结束或者完成之后把整个屏幕截取下来并分享到社交平台上。先上效果吧。
网上一搜,截屏的方法很多。这里只贴出了一种,将截取到Bitmap赋给Dialog上的ImageView并弹出对话框。对对话框加了弹出和收起的动画。看起来就有截屏的感觉了。下面是所有代码。
弹出Dialog方法:包括截屏和弹出Dialog
/** * 游戏切图dialog分享 */ private void popShotSrceenDialog(){ final AlertDialog cutDialog = new AlertDialog.Builder(this).create(); View dialogView = View.inflate(this, R.layout.show_cut_screen_layout, null); ImageView showImg = (ImageView) dialogView.findViewById(R.id.show_cut_screen_img); dialogView.findViewById(R.id.share_cancel).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { cutDialog.dismiss(); } }); dialogView.findViewById(R.id.share_img).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Toast.makeText(ShotSrceenActivity.this,"点击了share按钮",Toast.LENGTH_SHORT).show(); } }); //获取当前屏幕的大小 int width = getWindow().getDecorView().getRootView().getWidth(); int height = getWindow().getDecorView().getRootView().getHeight(); //生成相同大小的图片 Bitmap temBitmap = Bitmap.createBitmap( width, height, Bitmap.Config.ARGB_8888 ); //找到当前页面的跟布局 View view = getWindow().getDecorView().getRootView(); //设置缓存 view.setDrawingCacheEnabled(true); view.buildDrawingCache(); //从缓存中获取当前屏幕的图片 temBitmap = view.getDrawingCache(); showImg.setImageBitmap(temBitmap); cutDialog.setView(dialogView); Window window = cutDialog.getWindow(); window.setBackgroundDrawableResource(android.R.color.transparent); WindowManager m = window.getWindowManager(); Display d = m.getDefaultDisplay(); // 获取屏幕宽、高用 WindowManager.LayoutParams p = window.getAttributes(); // 获取对话框当前的参数值 p.height = (int) (d.getHeight() * 0.8); // 高度设置为屏幕的0.6 p.gravity = Gravity.CENTER;//设置弹出框位置 window.setAttributes(p); window.setWindowAnimations(R.style.dialogWindowAnim); cutDialog.show(); }
Dialog布局就是图片加按钮:
<?xml version="1.0" encoding="utf-8"?>
最后有个动画style和弹出动画以及收起动画:
弹出动画:
<?xml version="1.0" encoding="utf-8"?>
收起动画:
<?xml version="1.0" encoding="utf-8"?>
这样就完成了上图的效果,然后加入分享即可,网上说的截取屏幕用上面的方法所得到的图片状态栏位置是白色的一片。测试的时候我认为应该是透明的,解决方式是将状态栏设置为透明,然后再主布局中的最上面加上一个view来改变状态栏颜色,这样截取的Bitmap最上方状态栏就不会是白色的了。亲测是有效果的。
更多相关文章
- Android(安卓)5.0 开机横屏修改方法
- Android中常用布局单位
- android菜单资源
- Android(安卓)自定义View之中国地图热点区域分布
- Android的搜索框架实例详解
- android 消息垂直滚动轮播控件
- Android实现imageView在屏幕中缩放
- Android(安卓)N 程序适配要点
- Android之——史上最简单旋转菜单实现效果