Android實(shí)現(xiàn)屏幕截圖并保存截圖到指定文件
Android屏幕截圖并保存截取屏幕的圖片到指定文件,具體內(nèi)容如下
注意要添加權(quán)限:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
完整代碼:
package zhangphil.test;
import android.app.Activity;
import android.content.Context;
import android.content.res.Resources;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.os.Environment;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.util.DisplayMetrics;
import android.view.View;
import android.widget.Toast;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
public class JavaActivity extends AppCompatActivity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.drawable_activity);
AppCompatActivity activity = this;
findViewById(R.id.button).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
File file = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES), "zhangphil.jpg");
Bitmap bitmap = screenShot(activity);
try {
if (!file.exists())
file.createNewFile();
boolean ret = save(bitmap, file, Bitmap.CompressFormat.JPEG, true);
if (ret) {
Toast.makeText(getApplicationContext(), "截圖已保持至 " + file.getAbsolutePath(), Toast.LENGTH_SHORT).show();
}
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* 保存圖片到文件File。
*
* @param src 源圖片
* @param file 要保存到的文件
* @param format 格式
* @param recycle 是否回收
* @return true 成功 false 失敗
*/
public static boolean save(Bitmap src, File file, Bitmap.CompressFormat format, boolean recycle) {
if (isEmptyBitmap(src))
return false;
OutputStream os;
boolean ret = false;
try {
os = new BufferedOutputStream(new FileOutputStream(file));
ret = src.compress(format, 100, os);
if (recycle && !src.isRecycled())
src.recycle();
} catch (IOException e) {
e.printStackTrace();
}
return ret;
}
/**
* 獲取當(dāng)前屏幕截圖,不包含狀態(tài)欄(Status Bar)。
*
* @param activity activity
* @return Bitmap
*/
public static Bitmap screenShot(Activity activity) {
View view = activity.getWindow().getDecorView();
view.setDrawingCacheEnabled(true);
view.buildDrawingCache();
Bitmap bmp = view.getDrawingCache();
int statusBarHeight = getStatusBarHeight(activity);
int width = (int) getDeviceDisplaySize(activity)[0];
int height = (int) getDeviceDisplaySize(activity)[1];
Bitmap ret = Bitmap.createBitmap(bmp, 0, statusBarHeight, width, height - statusBarHeight);
view.destroyDrawingCache();
return ret;
}
public static float[] getDeviceDisplaySize(Context context) {
Resources resources = context.getResources();
DisplayMetrics dm = resources.getDisplayMetrics();
int width = dm.widthPixels;
int height = dm.heightPixels;
float[] size = new float[2];
size[0] = width;
size[1] = height;
return size;
}
public static int getStatusBarHeight(Context context) {
int height = 0;
int resourceId = context.getResources().getIdentifier("status_bar_height", "dimen", "android");
if (resourceId > 0) {
height = context.getResources().getDimensionPixelSize(resourceId);
}
return height;
}
/**
* Bitmap對(duì)象是否為空。
*/
public static boolean isEmptyBitmap(Bitmap src) {
return src == null || src.getWidth() == 0 || src.getHeight() == 0;
}
}
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Android RecyclerView多類(lèi)型布局卡片解決方案
這篇文章主要介紹了Android RecyclerView多類(lèi)型布局卡片解決方案,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2019-03-03
Android自定義View實(shí)現(xiàn)仿GitHub的提交活躍表格
這篇文章主要介紹了Android自定義View實(shí)現(xiàn)仿GitHub的提交活躍表格,非常不錯(cuò),具有參考借鑒價(jià)值,需要的的朋友參考下吧2017-01-01
Android tabLayout+recyclerView實(shí)現(xiàn)錨點(diǎn)定位的示例
這篇文章主要介紹了Android tabLayout+recyclerView實(shí)現(xiàn)錨點(diǎn)定位的示例,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-08-08
Android LinearLayout實(shí)現(xiàn)自動(dòng)換行效果
這篇文章主要為大家詳細(xì)介紹了Android LinearLayout實(shí)現(xiàn)自動(dòng)換行效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-08-08
Android 使用URLConnection下載音頻文件的方法
有時(shí)候我們會(huì)需要下載音頻文件。這里提供一種思路,將在線音頻文件通過(guò)流寫(xiě)到本地文件中。需要的朋友可以參考下2019-09-09
Android 用HttpURLConnection訪問(wèn)網(wǎng)絡(luò)的方法
下面小編就為大家分享一篇Android 用HttpURLConnection訪問(wèn)網(wǎng)絡(luò)的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-01-01
Android入門(mén)之利用Spinner實(shí)現(xiàn)彈出選擇對(duì)話框
這篇文章主要為大家詳細(xì)介紹了Android里如何巧用Spinner做彈出選擇對(duì)話框,文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,感興趣的小伙伴可以了解一下2022-11-11
Android 4.4.2 橫屏應(yīng)用隱藏狀態(tài)欄和底部虛擬鍵的方法
這篇文章主要介紹了Android 4.4.2 橫屏應(yīng)用隱藏狀態(tài)欄和底部虛擬鍵的方法,需要的朋友可以參考下2017-01-01

