Android實現截圖功能(可根據該代碼進行擴充功能)

來源:互聯網
上載者:User

       

package com.pps.screen.activity;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import android.app.Activity;import android.graphics.Bitmap;import android.graphics.Rect;import android.util.Log;import android.view.View;/** * 進行截屏工具類 * @author jiangqingqing * @time 2013/09/29 */public class ScreenShotUtils {/** * 進行截取螢幕   * @param pActivity * @return bitmap */public static Bitmap takeScreenShot(Activity pActivity){Bitmap bitmap=null;View view=pActivity.getWindow().getDecorView();// 設定是否可以進行繪圖緩衝view.setDrawingCacheEnabled(true);// 如果繪圖緩衝無法,強制構建繪圖緩衝view.buildDrawingCache();    // 返回這個緩衝視圖 bitmap=view.getDrawingCache();// 擷取狀態列高度Rect frame=new Rect();// 測量螢幕寬和高view.getWindowVisibleDisplayFrame(frame);int stautsHeight=frame.top;Log.d("jiangqq", "狀態列的高度為:"+stautsHeight);int width=pActivity.getWindowManager().getDefaultDisplay().getWidth();int height=pActivity.getWindowManager().getDefaultDisplay().getHeight();// 根據座標點和需要的寬和高建立bitmapbitmap=Bitmap.createBitmap(bitmap, 0, stautsHeight, width, height-stautsHeight);return bitmap;}/** * 儲存圖片到sdcard中 * @param pBitmap */private static boolean savePic(Bitmap pBitmap,String strName){  FileOutputStream fos=null;  try {fos=new FileOutputStream(strName);if(null!=fos){pBitmap.compress(Bitmap.CompressFormat.PNG, 90, fos);fos.flush();fos.close();return true;}} catch (FileNotFoundException e) {e.printStackTrace();}catch (IOException e) {e.printStackTrace();}  return false;} /** *  * @param pActivity  * @return 並且儲存sdcard成功返回true,否則返回false */public static boolean shotBitmap(Activity pActivity){return  ScreenShotUtils.savePic(takeScreenShot(pActivity), "sdcard/"+System.currentTimeMillis()+".png");}}
  然後直接在需要的地方進行調用就shotBitmap(pActivity)方法就行,布局檔案如下:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="fill_parent"    android:layout_height="fill_parent"    android:orientation="vertical"    android:background="@android:color/black"     >        <TextView         android:id="@+id/tv"        android:layout_width="fill_parent"        android:layout_height="wrap_content"        android:textSize="20sp"        android:textColor="@android:color/darker_gray"        android:text="    這是類比的demo,點擊下面的按鈕直接,當然你還可以在此基礎上面進行擴充更多豐富的功能;(例如:搖一搖,或者開啟服務,N秒時間後自動儲存)"/>        <ImageView         android:id="@+id/img"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:src="@drawable/keji"        android:scaleType="fitXY"        android:layout_gravity="center_horizontal"        android:layout_marginTop="10dip"/>    <Button        android:id="@+id/btn"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:text="點擊"         android:layout_gravity="center_horizontal"        android:layout_marginTop="10dip"/></LinearLayout>
調用代碼:

boolean result = ScreenShotUtils.shotBitmap(MainActivity.this);if(result){Toast.makeText(MainActivity.this, "成功.", Toast.LENGTH_SHORT).show();}else {Toast.makeText(MainActivity.this, "失敗.", Toast.LENGTH_SHORT).show();}
例子比較簡單,效果如下:


相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.