关闭

android完美截屏

421人阅读 评论(0) 收藏 举报


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;
    }
 
}

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:56811次
    • 积分:1746
    • 等级:
    • 排名:千里之外
    • 原创:116篇
    • 转载:27篇
    • 译文:2篇
    • 评论:3条
    最新评论