標籤:java screenshot 截屏
android開發中通過View的getDrawingCache方法可以達到截屏的目的,只是缺少狀態列!
原始介面
截屏得到的圖片
代碼實現
1. 添加許可權(AndroidManifest.xml檔案裡)
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
2. 添加1個Button(activity_main.xml檔案)
<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檔案)
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 {@Overrideprotected 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() {@Overridepublic 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) {} }}@Overridepublic 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代碼實現截屏功能