日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > Android >内容正文

Android

Android调用长截屏,Android实现长截屏功能

發(fā)布時間:2023/12/10 Android 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android调用长截屏,Android实现长截屏功能 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

本文實(shí)例為大家分享了Android實(shí)現(xiàn)長截屏功能的具體代碼,供大家參考,具體內(nèi)容如下

1、MainActivity

public class MainActivity extends AppCompatActivity {

ScrollView scrollView;

String sdRoot = Environment.getExternalStorageDirectory().getPath();

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

scrollView = (ScrollView) findViewById(R.id.scroll);

//權(quán)限

int permission_write= ContextCompat.checkSelfPermission(this,

Manifest.permission.WRITE_EXTERNAL_STORAGE);

int permission_read=ContextCompat.checkSelfPermission(this,

Manifest.permission.READ_EXTERNAL_STORAGE);

if(permission_write!= PackageManager.PERMISSION_GRANTED

|| permission_read!=PackageManager.PERMISSION_GRANTED){

Toast.makeText(this, "正在請求權(quán)限", Toast.LENGTH_SHORT).show();

//申請權(quán)限,特征碼自定義為1,可在回調(diào)時進(jìn)行相關(guān)判斷

ActivityCompat.requestPermissions(this,new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE,Manifest.permission.READ_EXTERNAL_STORAGE},1);

}

}

@Override

public void onWindowFocusChanged(boolean hasFocus) {

shootScrollView(scrollView, "sdRoot");

// takeScreenshot();

super.onWindowFocusChanged(hasFocus);

}

@Override

protected void onResume() {

super.onResume();

}

/**

* 截取scrollview的屏幕

* **/

public static Bitmap getScrollViewBitmap(ScrollView scrollView, String picpath) {

int h = 0;

Bitmap bitmap;

// 獲取listView實(shí)際高度

for (int i = 0; i < scrollView.getChildCount(); i++) {

h += scrollView.getChildAt(i).getHeight();

scrollView.getChildAt(i).setBackgroundColor(Color.parseColor("#ffffff"));

}

Log.d(TAG, "實(shí)際高度:" + h);

Log.d(TAG, " 高度:" + scrollView.getHeight());

// 創(chuàng)建對應(yīng)大小的bitmap

bitmap = Bitmap.createBitmap(scrollView.getWidth(), h,

Bitmap.Config.ARGB_8888);

final Canvas canvas = new Canvas(bitmap);

scrollView.draw(canvas);

// 測試輸出

FileOutputStream out = null;

try {

out = new FileOutputStream(picpath);

} catch (FileNotFoundException e) {

e.printStackTrace();

}

try {

if (null != out) {

bitmap.compress(Bitmap.CompressFormat.PNG, 100, out);

out.flush();

out.close();

}

} catch (IOException e) {

}

Log.d("TAG", "getScrollViewBitmap() returned: " + bitmap.getHeight());

return bitmap;

}

private static String TAG = "Listview and ScrollView item 截圖:";

/**

* 截圖listview

* **/

public static Bitmap getListViewBitmap(ListView listView, String picpath) {

int h = 0;

Bitmap bitmap;

// 獲取listView實(shí)際高度

for (int i = 0; i < listView.getChildCount(); i++) {

h += listView.getChildAt(i).getHeight();

}

Log.d(TAG, "實(shí)際高度:" + h);

Log.d(TAG, "list 高度:" + listView.getHeight());

// 創(chuàng)建對應(yīng)大小的bitmap

bitmap = Bitmap.createBitmap(listView.getWidth(), h,

Bitmap.Config.ARGB_8888);

final Canvas canvas = new Canvas(bitmap);

listView.draw(canvas);

// 測試輸出

FileOutputStream out = null;

try {

out = new FileOutputStream(picpath);

} catch (FileNotFoundException e) {

e.printStackTrace();

}

try {

if (null != out) {

bitmap.compress(Bitmap.CompressFormat.PNG, 100, out);

out.flush();

out.close();

}

} catch (IOException e) {

}

return bitmap;

}

// 程序入口 截取ScrollView

public static void shootScrollView(ScrollView scrollView, String picpath) {

// ScreenShot.savePic(getScrollViewBitmap(scrollView, picpath), picpath);

ScreenShot.saveMyBitmap(getScrollViewBitmap(scrollView, picpath), picpath);

}

// 程序入口 截取ListView

public static void shootListView(ListView listView, String picpath) {

ScreenShot.savePic(getListViewBitmap(listView,picpath), picpath);

}

private void takeScreenshot() {

Date now = new Date();

android.text.format.DateFormat.format("yyyy-MM-dd_hh:mm:ss", now);

try {

// image naming and path to include sd card appending name you choose for file

String mPath = Environment.getExternalStorageDirectory().toString() + "/" + now + ".jpg";

// create bitmap screen capture

View v1 = getWindow().getDecorView().getRootView();

v1.setDrawingCacheEnabled(true);

Bitmap bitmap = Bitmap.createBitmap(v1.getDrawingCache());

v1.setDrawingCacheEnabled(false);

File imageFile = new File(mPath);

FileOutputStream outputStream = new FileOutputStream(imageFile);

int quality = 100;

bitmap.compress(Bitmap.CompressFormat.JPEG, quality, outputStream);

outputStream.flush();

outputStream.close();

openScreenshot(imageFile);

} catch (Throwable e) {

// Several error may come out with file handling or OOM

e.printStackTrace();

}

}

private void openScreenshot(File imageFile) {

Intent intent = new Intent();

intent.setAction(Intent.ACTION_VIEW);

Uri uri = Uri.fromFile(imageFile);

intent.setDataAndType(uri, "image/*");

startActivity(intent);

}

}

2.ScreenShot

public class ScreenShot{

// 獲取指定Activity的截屏,保存到png文件

public static Bitmap takeScreenShot(Activity activity) {

// View是你需要截圖的View

View view = activity.getWindow().getDecorView();

view.setDrawingCacheEnabled(true);

view.buildDrawingCache();

Bitmap b1 = view.getDrawingCache();

// 獲取狀態(tài)欄高度

Rect frame = new Rect();

activity.getWindow().getDecorView().getWindowVisibleDisplayFrame(frame);

int statusBarHeight = frame.top;

System.out.println(statusBarHeight);

// 獲取屏幕長和高

int width = activity.getWindowManager().getDefaultDisplay().getWidth();

int height = activity.getWindowManager().getDefaultDisplay()

.getHeight();

// 去掉標(biāo)題欄

// Bitmap b = Bitmap.createBitmap(b1, 0, 25, 320, 455);

Bitmap b = Bitmap.createBitmap(b1, 0, statusBarHeight, width, height

- statusBarHeight);

view.destroyDrawingCache();

return b;

}

// 保存到sdcard

public static void savePic(Bitmap b, String strFileName) {

FileOutputStream fos = null;

Log.d("TAG", "savePic() returned: " );

try {

fos = new FileOutputStream(strFileName);

if (null != fos) {

b.compress(Bitmap.CompressFormat.PNG, 90, fos);

Log.d("TAG", "savePic() returned: " + b.getHeight());

fos.flush();

fos.close();

}

} catch (FileNotFoundException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}

}

// 程序入口 截取當(dāng)前屏幕

public static void shootLoacleView(Activity a, String picpath) {

ScreenShot.savePic(ScreenShot.takeScreenShot(a), picpath);

}

/**

* 保存bitmap到SD卡

* @param bitName 保存的名字

* @param mBitmap 圖片對像

* return 生成壓縮圖片后的圖片路徑

*/

@SuppressLint("SdCardPath")

public static String saveMyBitmap(Bitmap mBitmap, String bitName) {

String path = Environment.getExternalStorageDirectory()+"/"+bitName+".png";

File f = new File(path);

try {

f.createNewFile();

} catch (IOException e) {

System.out.println("在保存圖片時出錯:" + e.toString());

}

FileOutputStream fOut = null;

try {

fOut = new FileOutputStream(f);

} catch (FileNotFoundException e) {

e.printStackTrace();

}

try {

mBitmap.compress(Bitmap.CompressFormat.PNG, 100, fOut);

} catch (Exception e) {

return "create_bitmap_error";

}

try {

fOut.flush();

} catch (IOException e) {

e.printStackTrace();

}

try {

fOut.close();

} catch (IOException e) {

e.printStackTrace();

}

// File file = new File(Environment.getExternalStorageDirectory(), System.currentTimeMillis()+".jpg");

// FileOutputStream out = null;

// try {

// out = new FileOutputStream(file);

// mBitmap.compress(Bitmap.CompressFormat.JPEG, 90, out);

// System.out.println("___________保存的__sd___下_______________________");

// } catch (FileNotFoundException e) {

// e.printStackTrace();

// }

// try {

// out.flush();

// out.close();

// } catch (IOException e) {

// e.printStackTrace();

// }

return path;

// Toast.makeText(HahItemActivity.this,"保存已經(jīng)至"+Environment.getExternalStorageDirectory()+"下", Toast.LENGTH_SHORT).show();

}

}

3.xml

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

總結(jié)

以上是生活随笔為你收集整理的Android调用长截屏,Android实现长截屏功能的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。