美文网首页Android学习知识Android知识手机移动程序开发
Android获取当前Activity的屏幕截图并设置为壁纸

Android获取当前Activity的屏幕截图并设置为壁纸

作者: uzck | 来源:发表于2017-01-11 00:20 被阅读179次

    因为做项目的时候有人跟我提了一个想法,把备忘录生成一个图片,方便用户设置为壁纸,省去截屏裁剪的步骤。之前也没做过这个功能,在网络上搜索了一下,发现了一篇文章刚好满足需求地址,基本照搬上面的代码,在这基础上加上设置壁纸的功能,这样功能就基本实现了。
    废话不多说,看代码

    获取Activity的屏幕截图

    这一步是整个环节的基础,没截图一切都是扯淡。截图部分利用的原理是通过Activity里的顶层View,再将该View的视图转化为Bitmap

    public Bitmap myShot(Activity activity) { 
        // 获取windows中最顶层的view 
        View view = activity.getWindow().getDecorView();
        view.builDrawingCache();
    
        // 获取状态栏高度 
        Rect rect = new Rect();
        view.getWindowVisibleDisplayFrame(rect); 
        int statusBarHeights = rect.top;        
        Display display =  activity.getWindowManager().getDefaultDisplay(); 
    
        // 获取屏幕宽和高 
        int widths = display.getWidth(); 
        int heights = display.getHeight();
    
         // 允许当前窗口保存缓存信息 
        view.setDrawingCacheEnabled(true); 
    
        // 去掉状态栏 
        Bitmap bmp = Bitmap.createBitmap(view.getDrawingCache(), 0, statusBarHeights, widths, heights - statusBarHeights); 
    
        // 销毁缓存信息 
        view.destroyDrawingCache(); 
    
        return bmp; 
    }
    

    注释写的很详细了,获取DecorView,这个在自定义View的时候也了解过,是Activity的顶层View,包括title和content。然后利用View缓存的bitmap生成我们想要的bitmap,区域可以任意选择,需要截哪部分自行修改参数即可。

    设置壁纸

    获取到bitmap了,接下来看如何设置壁纸。设置壁纸需要用到的类是WallPaperManager,跟大多数的服务一样,需要context来获取,提醒:要在Manifest文件里给<uses-permission android:name="android.permission.SET_WALLPAPER" />

    public void setWallPaper(Bitmap bitmap, Activity activity) {
        WallPaperManager manager = WallPaperManager.getInstance(activity);
        manager.setBitmap(bitmap);
    }
    

    只有几行代码就搞定了,是不是觉得特别简单。
    但是运行程序后你就会发现,效果不对,这是因为因为截取的部分较小,在设置时系统会以居中显示的方式设置壁纸。所以后来我的想法是自己进行bitmap的放大后再裁剪,确保最终的bitmap大小与屏幕大小一致。

    相关文章

      网友评论

        本文标题:Android获取当前Activity的屏幕截图并设置为壁纸

        本文链接:https://www.haomeiwen.com/subject/azulbttx.html