android完美截屏

原创 2015年07月08日 11:58:19


1
android开发中通过View的getDrawingCache方法可以达到截屏的目的,只是缺少状态栏!

原始界面

图1


截屏得到的图片

图1


代码实现

1. 添加权限(AndroidManifest.xml文件里)


1
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

2. 添加1个Button(activity_main.xml文件)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity" >
 
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="true"
        android:text="@string/hello_world" />
     
    <Button
        android:id="@+id/btn_save"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Screenshot"
        />
 
</RelativeLayout>



3. 实现截屏(MainActivity.java文件)


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
package com.example.androidtest;
 
import java.io.File;
import java.io.FileOutputStream;
 
import android.os.Bundle;
import android.os.Environment;
import android.app.Activity;
import android.graphics.Bitmap;
import android.view.Menu;
import android.view.View;
import android.widget.Button;
 
public class MainActivity extends Activity {
     
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
         
        Button btn = (Button) this.findViewById(R.id.btn_save);
        btn.setOnClickListener(new View.OnClickListener() {
             
            @Override
            public void onClick(View v) {
                screenshot();
            }
        });
    }
     
    private void screenshot()
    {
        // 获取屏幕
        View dView = getWindow().getDecorView(); 
        dView.setDrawingCacheEnabled(true);  
        dView.buildDrawingCache();  
        Bitmap bmp = dView.getDrawingCache();
        if (bmp != null)
        {
            try {
                // 获取内置SD卡路径
                String sdCardPath = Environment.getExternalStorageDirectory().getPath();
                // 图片文件路径
                String filePath = sdCardPath + File.separator + "screenshot.png";
                 
                File file = new File(filePath);
                FileOutputStream os = new FileOutputStream(file);
                bmp.compress(Bitmap.CompressFormat.PNG, 100, os);
                os.flush();
                os.close();
            } catch (Exception e) {
            }
        }
    }
 
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.activity_main, menu);
        return true;
    }
 
}

1

android开发中通过View的getDrawingCache方法可以达到截屏的目的,只是缺少状态栏!

原始界面

图1


截屏得到的图片

图1


代码实现

1. 添加权限(AndroidManifest.xml文件里)


?
1
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

2. 添加1个Button(activity_main.xml文件)



?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity" >
 
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="true"
        android:text="@string/hello_world" />
     
    <Button
        android:id="@+id/btn_save"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Screenshot"
        />
 
</RelativeLayout>



3. 实现截屏(MainActivity.java文件)


?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
package com.example.androidtest;
 
import java.io.File;
import java.io.FileOutputStream;
 
import android.os.Bundle;
import android.os.Environment;
import android.app.Activity;
import android.graphics.Bitmap;
import android.view.Menu;
import android.view.View;
import android.widget.Button;
 
public class MainActivity extends Activity {
     
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
         
        Button btn = (Button) this.findViewById(R.id.btn_save);
        btn.setOnClickListener(new View.OnClickListener() {
             
            @Override
            public void onClick(View v) {
                screenshot();
            }
        });
    }
     
    private void screenshot()
    {
        // 获取屏幕
        View dView = getWindow().getDecorView(); 
        dView.setDrawingCacheEnabled(true);  
        dView.buildDrawingCache();  
        Bitmap bmp = dView.getDrawingCache();
        if (bmp != null)
        {
            try {
                // 获取内置SD卡路径
                String sdCardPath = Environment.getExternalStorageDirectory().getPath();
                // 图片文件路径
                String filePath = sdCardPath + File.separator + "screenshot.png";
                 
                File file = new File(filePath);
                FileOutputStream os = new FileOutputStream(file);
                bmp.compress(Bitmap.CompressFormat.PNG, 100, os);
                os.flush();
                os.close();
            } catch (Exception e) {
            }
        }
    }
 
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.activity_main, menu);
        return true;
    }
 
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

Android完美实现截屏

很多app都有截屏的需求,当你遇到产品经理给你提出这个需求时,你搜索了一下: 1.取View的cacheDrawable 来实现截屏,这种方案,没有兼容性问题,但是缺点有两个: 不能截状态...

QQ截屏完美实现 小结

QQ截屏的完美模拟至现在2011年2月15日,网上仍然没有一个能够在灰暗遮罩的功能上和即时效率上完美模拟QQ截屏的软件,以下的帖子和软件和QQ截屏相比都相差了太多。http://download.cs...
  • TBWood
  • TBWood
  • 2011年02月15日 18:51
  • 7107

PSP2000完美截屏插件

  • 2007年12月05日 10:12
  • 379KB
  • 下载

Android截屏

  • 2013年12月20日 23:00
  • 19KB
  • 下载

Android截屏的几种实现

Android截屏的几种实现方式一 public static Bitmap capture(Activity activity) { activity.getWindow()....

Android系统截屏功能提取Demo

  • 2014年09月15日 21:34
  • 59KB
  • 下载

vlc-android截屏以及录像功能的实现

这里讲的是vlc-android截屏以及录像功能的实现,如果单纯想编译vlc-android的源码请移步至:http://blog.csdn.net/a358763471/article/detail...

Android截屏Demo

  • 2015年02月22日 21:37
  • 296KB
  • 下载

android 截屏功能

  • 2013年11月26日 18:02
  • 107KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:android完美截屏
举报原因:
原因补充:

(最多只允许输入30个字)