Android 截屏并保存
来源:互联网 发布:如何雇佣网络水军 编辑:程序博客网 时间:2024/04/25 04:29
可能大家的手机都有截屏的功能,所以觉得这个截屏功能有点鸡肋,但是玩过天天酷跑的,应该都知道有这个分享功能,基于游戏中的那些截屏功能,花了两个多小时来写这个简单的 截屏功能,这篇就用来抛砖迎玉。
思路:1.获得屏幕的大小,再将屏幕以bitmap的形式保存下来
2。用bitmap。compress。将图片保存为文件
基本的思路就是这样,我想看到这儿大家都应该明白怎么写了,也许大家有别的思路,欢迎留言,谢谢
先代码吧;
public class MainActivity extends Activity {
private Button button;
private ImageView imageview;
private String filename;
File file;
Bitmap bitmap2;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final WindowManager windowmanager= (WindowManager) this.getSystemService(Context.WINDOW_SERVICE);
WindowManager.LayoutParams wmParams=new WindowManager.LayoutParams();
wmParams.type = WindowManager.LayoutParams.TYPE_APPLICATION; // 设置window type
wmParams.gravity = Gravity.RIGHT| Gravity. CENTER_VERTICAL; // 调整悬浮窗口至右侧中间
wmParams.width = WindowManager.LayoutParams.WRAP_CONTENT;
wmParams.height =WindowManager.LayoutParams.WRAP_CONTENT;
final Button button=new Button(getApplicationContext());
windowmanager.addView(button,wmParams);
filename = "sss.jpg";
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
BitmapDrawable bd = new BitmapDrawable(shot());
try {
File file = new File(Environment.getExternalStorageDirectory() + "/" + filename);
FileOutputStream fileOutputStream = new FileOutputStream(file);
bitmap2.compress(Bitmap.CompressFormat.JPEG, 100, fileOutputStream);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
});
}
//获得bitmap
private Bitmap shot() {
View view = getWindow().getDecorView();
Toast.makeText(getApplicationContext(), "已经截屏", Toast.LENGTH_SHORT).show();
Display display = this.getWindowManager().getDefaultDisplay();
view.layout(0, 0, display.getWidth(), display.getHeight());
view.setDrawingCacheEnabled(true);
bitmap2 = Bitmap.createBitmap(view.getDrawingCache());
Toast.makeText(getApplicationContext(), "已经截屏", Toast.LENGTH_SHORT).show();
return bitmap2;
}
}
大家应该可以看得出这里用了windowmanager;这是对窗口的管理,比较经典的例子就是360的浮动窗口,但是这儿不一样,这个是应用内部的,这区别在于
final WindowManager windowmanager= (WindowManager) this.getSystemService(Context.WINDOW_SERVICE);
WindowManager.LayoutParams wmParams=new WindowManager.LayoutParams();
wmParams.type = WindowManager.LayoutParams.TYPE_APPLICATION ;
首先,大家应该都知道context这玩意,也都知道getapplicationcontext以及mainactivity.this的区别,在这儿,如果你跟我也是用
final WindowManager windowmanager= (WindowManager) this.getSystemService(Context.WINDOW_SERVICE);
那么,就是在应用内部,创造那个按钮,也就是说你的按钮的范围只能在你当前的那个activity里面,无法向360那样直接突破应用层,至于LayoutParams的type类型,在sdk的文档里面有讲到,希望大家自己去查查看sdk,附上windwomanager的layoutparams位置:D:\android\sdk\docs\reference\android\view\WindowManager.LayoutParams.html
关于type类型,sdk里面有讲到,但是我是看不懂的,所以只能一个一个的去试,希望你们看得懂。
最后,加上所需要的权限
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
- android 截屏并保存
- Android 截屏并保存
- Android 自动截屏并保存脚本
- Android 截屏并保存至相册
- Android截屏并保存到手机
- 截屏并保存
- Android 实现简单截屏并保存为文件
- android 截屏并将其保存成jpeg图片格式
- android ScrollView,ListView 截屏并保存到图库
- Android实现简单截屏并保存为文件
- Android 5.0 以上 截屏并保存为PNG方案
- unity 截屏并保存
- android图片下载并保存
- Android画图并保存图片
- Android画图并保存图片
- Android画图并保存图片
- Android画图并保存图片
- android 照片旋转并保存
- 使用include标签引入布局
- 精华阅读第 9 期 |滴滴出行 iOS 客户端架构演进之路
- Android startActivity源码详解
- xfire web service导致cpu100%问题分析
- LintCode 删除链表中等于给定值val的所有节点
- Android 截屏并保存
- css 长单词不换行溢出容器的解决方法 word-wrap与word-break
- centos配置mutt跟msmtp发送邮件
- phpredis中文手册——《redis中文手册》 php版
- 16其他UI内容
- FragmentTabhost学习笔记
- Genymotion出现”Unable to load VirtualBox engine“的问题解决
- float和double的内存布局
- 内存溢出java.lang.OutOfMemoryError解决方法