android螢幕和view的截圖

來源:互聯網
上載者:User

整個activity或者View組件顯示的內容可以通過cache機制儲存為bitmap, 使用到的api有
    void  setDrawingCacheEnabled(boolean flag),
    Bitmap  getDrawingCache(boolean autoScale),
    void  buildDrawingCache(boolean autoScale),
    void  destroyDrawingCache()
    我們要擷取它的cache先要通過setDrawingCacheEnable方法把cache開啟,然後再調用getDrawingCache方法就可以獲得view的cache圖片了。buildDrawingCache方法可以不用調用,因為調用getDrawingCache方法時,若果 cache沒有建立,系統會自動調用buildDrawingCache方法產生cache。若果要更新cache, 必須要調用destoryDrawingCache方法把舊的cache銷毀,才能建立新的。
當調用setDrawingCacheEnabled方法設定為false, 系統也會自動把原來的cache銷毀。
   ViewGroup在繪製子view時,而外提供了兩個方法
   void setChildrenDrawingCacheEnabled(boolean enabled)
   setChildrenDrawnWithCacheEnabled(boolean enabled)
   setChildrenDrawingCacheEnabled方法可以使viewgroup裡所有的子view開啟cache, setChildrenDrawnWithCacheEnabled使在繪製子view時,若該子view開啟了cache, 則使用它的cache進行繪製,從而節省繪製時間。
   擷取cache通常會佔用一定的記憶體,所以通常不需要的時候有必要對其進行清理,通過destroyDrawingCache或setDrawingCacheEnabled(false)實現。

1. android  螢幕 代碼如下:

 

 

android螢幕       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.view.View;               public class ScreenShot {           // 擷取指定Activity的截屏,儲存到png檔案           private static Bitmap takeScreenShot(Activity activity){               //View是你需要的View               View view = activity.getWindow().getDecorView();               view.setDrawingCacheEnabled(true);               view.buildDrawingCache();               Bitmap b1 = view.getDrawingCache();                               //擷取狀態列高度               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();                 //去掉標題列               //Bitmap b = Bitmap.createBitmap(b1, 0, 25, 320, 455);               Bitmap b = Bitmap.createBitmap(b1, 0, statusBarHeight, width, height - statusBarHeight);               view.destroyDrawingCache();               return b;           }                       //儲存到sdcard           private static void savePic(Bitmap b,String strFileName){               FileOutputStream fos = null;               try {                   fos = new FileOutputStream(strFileName);                   if (null != fos)                   {                       b.compress(Bitmap.CompressFormat.PNG, 90, fos);                       fos.flush();                       fos.close();                   }               } catch (FileNotFoundException e) {                   e.printStackTrace();               } catch (IOException e) {                   e.printStackTrace();               }           }                       //程式入口           public static void shoot(Activity a){               ScreenShot.savePic(ScreenShot.takeScreenShot(a), "sdcard/xx.png");           }       } 

2.  截取listview中的Item  代碼:

private AdapterView.OnItemLongClickListener mListenerLongClickMemItem = new AdapterView.OnItemLongClickListener() {@Overridepublic boolean onItemLongClick(AdapterView<?> adapter, View view,int pos, long id) {// TODO Auto-generated method stubAvcRoomItem item = mCore.getRoomShowMembers().get(pos);if (item.getmType() == RoomItemType.ROOM_ITEM_CARD&& mCore.getMyself().isPresider()) {view.destroyDrawingCache();view.setDrawingCacheEnabled(true);Bitmap bm = Bitmap.createBitmap(view.getDrawingCache());if (!mTemplate.isShown())mCore.doShowPScreen();mTempDevItem = item;startDrag(bm, (int) mListMember.getLastMotionEvent().getRawX(),(int) mListMember.getLastMotionEvent().getRawY());}return false;}};

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.