可能大家的手机都有截屏的功能,所以觉得这个截屏功能有点鸡肋,但是玩过天天酷跑的,应该都知道有这个分享功能,基于游戏中的那些截屏功能,花了两个多小时来写这个简单的 截屏功能,这篇就用来抛砖迎玉。

思路: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里面有讲到,但是我是看不懂的,所以只能一个一个的去试,希望你们看得懂。

最后,加上所需要的权限



   

更多相关文章

  1. Android(安卓)屏蔽Power键 Home键
  2. Android与iPhone的对比(水木上看到的,不清楚原文来源)
  3. Android软件推荐(1)
  4. Android(安卓)Studio实现一个点餐系统
  5. 如何透過Android模擬器刪除不要的ap程式!!
  6. 没错,你没有看错,博客园Android客户端开源了!
  7. Android(安卓)的闪退,崩溃等分析思路
  8. Android中提供的免费文字转语音功能TextToSpeech之快速入门用法(A
  9. Android(安卓)开发自己的网络收音机1——功能要求及设计方案

随机推荐

  1. android之Fresco框架--Fresco基本使用
  2. Android图像处理简单例子
  3. Android(安卓)内核编译
  4. NDK r21b 编译FFmpeg 、x264 提供Android
  5. 国际B2C业务团队——无线、技术职位推荐
  6. Android及Java使用google.zxing生成和解
  7. Android(安卓)应用发布全攻略
  8. android抓包
  9. Android用MediaRecorder实现MPEG4视频监
  10. 【原创】Android(安卓)系统稳定性 - ANR(