Android給scrollView截圖超過螢幕大小形成長圖
很多的時候,我們想要分享一個介面的所有內容,可是內容太多,超過了螢幕的大小,簡單的截圖已經滿足不了我們的需要,這時候我們就可以根據佈局裡scrollView的高度來擷取圖片。
程式碼如下:
在需要用到的地方呼叫getBitmapByView()方法即可:/** * 擷取scrollview的螢幕 * @param scrollView * @return */ public static Bitmap getBitmapByView(ScrollView scrollView) { int h = 0; Bitmap bitmap = null; // 獲取scrollview實際高度 for (int i = 0; i < scrollView.getChildCount(); i++) { h += scrollView.getChildAt(i).getHeight(); scrollView.getChildAt(i).setBackgroundColor( Color.parseColor("#ffffff")); } // 建立對應大小的bitmap bitmap = Bitmap.createBitmap(scrollView.getWidth(), h, Bitmap.Config.RGB_565); final Canvas canvas = new Canvas(bitmap); scrollView.draw(canvas); return bitmap; } /** * 壓縮圖片 * @param image * @return */ public static Bitmap compressImage(Bitmap image) { ByteArrayOutputStream baos = new ByteArrayOutputStream(); // 質量壓縮方法,這裡100表示不壓縮,把壓縮後的資料存放到baos中 image.compress(Bitmap.CompressFormat.JPEG, 100, baos); int options = 100; // 迴圈判斷如果壓縮後圖片是否大於100kb,大於繼續壓縮 while (baos.toByteArray().length / 1024 > 100) { // 重置baos baos.reset(); // 這裡壓縮options%,把壓縮後的資料存放到baos中 image.compress(Bitmap.CompressFormat.JPEG, options, baos); // 每次都減少10 options -= 10; } // 把壓縮後的資料baos存放到ByteArrayInputStream中 ByteArrayInputStream isBm = new ByteArrayInputStream(baos.toByteArray()); // 把ByteArrayInputStream資料生成圖片 Bitmap bitmap = BitmapFactory.decodeStream(isBm, null, null); return bitmap; } /** * 儲存到sdcard * @param b * @return */ public static String savePic(Bitmap b) { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd_HH-mm-ss", Locale.US); File outfile = new File("/sdcard/image"); // 如果檔案不存在,則建立一個新檔案 if (!outfile.isDirectory()) { try { outfile.mkdir(); } catch (Exception e) { e.printStackTrace(); } } String fname = outfile + "/" + sdf.format(new Date()) + ".png"; FileOutputStream fos = null; try { fos = new FileOutputStream(fname); if (null != fos) { b.compress(Bitmap.CompressFormat.PNG, 90, fos); fos.flush(); fos.close(); } } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return fname; }
String fname = ScreenShot.savePic(ScreenShot.getBitmapByView(scrollView));
但是這樣寫的話有時候會因為擷取的圖片太長太大而報outofmemory的錯,所以為了避免記憶體溢位,程式崩掉,要注意用Config.RGB_565,會比ARGB_8888少佔記憶體。還有就是把圖片壓縮一下,至少我這樣就沒有報oom的錯了,即:
String fname = ScreenShot.savePic(ScreenShot.compressImage(ScreenShot .getBitmapByView(scrollView)));
相關推薦
Android給scrollView截圖超過螢幕大小形成長圖
很多的時候,我們想要分享一個介面的所有內容,可是內容太多,超過了螢幕的大小,簡單的截圖已經滿足不了我們的需要,這時候我們就可以根據佈局裡scrollView的高度來擷取圖片。 程式碼如下: /** * 擷取scrollview的螢幕 * @param scrollV
基於android 實現擷取 內容超過螢幕大小的長圖
任何事都要去試試,只停留在想象的層面,那也等於waste of time,不要想當然 先看需求: 當內容已經超出了手機可顯示的範圍時,要擷取這些所有的內容,從而生成所謂的”長截圖”. 沒什麼難點,利用了webview的特點,和scrollview 的vie
自定義MarqueeTextView字型沒有超過螢幕大小也能實現跑馬燈效果.
第一篇文章小白一名直接上程式碼吧 第一步:這個是自定義跑馬燈的類 public class MarqueeTextView extends android.support.v7.widget.AppCompatTextView { /** * 是否停止滾動 */ private boolea
Android中當item數量超過一定大小RecyclerView高度固定
Android中當item數量超過一定大小時,將RecyclerView高度固定 方法1 直接通過LayoutParams來設定相應高度 ViewGroup.LayoutParams lp = rv.getLayoutParams(); if
教你怎麼圖片等比例放大縮小超過螢幕大小
我就是那個帖子的樓主並且是版主,希望以後和大家多交流,我是南京誠邁公司的,叫廖建國,在ES2部分。 之前看到好多人問一個問題:怎麼圖片等比例放大或縮小超過螢幕大小,主要是後面超過螢幕大小,我一直沒看到有人回答,這個功能比較常見,所以我把這個方法共享出來,只是寫了核心
如何在一臺Android裝置上模擬不同的螢幕大小和解析度
在4.3之後,Android引入了wm shell命令,使用這條命令在一臺裝置上模擬出不同的螢幕解析度和畫素密度。這將方便開發者除錯APP在不同的裝置螢幕上的顯示效果。 adb shell wm size [reset | WxH] 設定新的螢幕寬W和寬H,執行rese
android webview載入html圖片自適應手機螢幕大小&點選檢視大圖
我們在開發中,顯示資訊詳情時,一般後臺會給出html文字,在Android端一般採用webview控制元件來展示,但是後臺給出的html文字一般是給電腦端用的,沒有自適配手機,導致手機端圖片顯示過大,需要左右移動來檢視全圖。下面給出幾種實用方法,達到在手機端用webvi
Android 開發技巧之 禁止截圖和螢幕常亮
1 禁止截圖 出於安全考慮,我們需要對某些介面,比如二維碼介面,登入介面禁止截圖。(像支付寶的付款二維碼) 禁止截圖的程式碼很簡單就一行,在Activity 生命初期的onCre
Android ScrollView巢狀ScrollView,並且巢狀的ScrollView超過螢幕部分
問題:我在ScrollView裡面嵌套了一個ScrollView,巢狀的ScrollView超出了螢幕顯示部分,需要向下滑動才能看到,當滑動下去找到巢狀的ScrollView時,滑動時並不能觸發它的onTouch()事件。 解決思路: 1. 先是參考的h
Android提高應用的安全性, 禁止螢幕截圖
在玩交通銀行的客戶端的時候, 發現一個很人性化的功能: 禁止螢幕截圖. 於是決定看看這個功能是怎麼實現的. Google了一番, 發現實現的方式就是在setContentView()方法前加上: getWindow().setFlags(LayoutPara
通過Python連線手機,並截圖手機螢幕儲存到電腦(android)
首先下載adb可以到百度網盤連結下載:https://pan.baidu.com/s/1htbYtq0或者自己去搜索引擎搜尋,網上一大堆將下載的壓縮包解壓,如圖:然後再系統中新增環境變數:右鍵我的電腦- 屬性-高階系統設定-高階-環境變數將Path中新增adb.exe的路徑:
Android零基礎入門第61節:滾動視圖ScrollView
andro 淡出 幀布局 選擇器 公眾號 響應 ges 分享 當前 前面幾期學習了ProgressBar系列組件、ViewAnimator系列組件、Picker系列組件和時間日期系列組件,接下來幾期繼續來學習常見的其他組件。 一、ScrollView概述
Android之高效率截圖
了解 過去 自動化測試工具 簡單 tac 4.5 height www 能夠 本文來自網易雲社區作者:孫聖翔在一張Android手機上截圖有好多辦法,為了能夠高效率的截圖,我幾乎把所有的方法都嘗試了一般。走了好多路,也遇到了好多的問題。只是想記錄下這其中的不容易。下面所有的
CSS實現自適應不同大小螢幕的背景大圖的兩種方法(轉自簡書)
CSS實現自適應不同大小螢幕的背景大圖的兩種方法 一張清晰漂亮的背景圖片能給網頁加分不少,設計師也經常會給頁面的背景使用大圖,我們既不想圖片因為不同解析度圖片變形,也不希望當在大屏的情況下,背景有一塊露白,簡而言之,就是實現能自適應螢幕大小又不會變形的背景大圖,而且背景圖片不會隨著
Android之獲取螢幕大小
java 程式碼 import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.util.DisplayMetrics; import andr
Android 輸出一個字串,不管字型大小如何修改,始終螢幕水平居中
本文指在沒有使用控制元件的的情況下 //獲取到螢幕的寬度 WindowManager wm = (WindowManager) getContext() .getSystemService(Conte
Android手機各種截圖方法
/** * 螢幕相關的輔助類 * * @since 2015-05-27 * @author lixi */ public class ScreenUtils { private ScreenUtils() { throw new UnsupportedOper
Android 任意區域截圖
1、全屏截圖 Android其實可以做到任意區域截圖,不過我們先來看看整個螢幕截圖程式碼,相信大家很熟悉,程式碼如下 View decorView = activity.getWindow().getDecorView(); decorView.setD
VC螢幕截圖(將螢幕指定區域存成圖片)
HBITMAP CLoadpicDlg::CopyScreenToBitmap(LPRECT lpRect) { HDC hScrDC, hMemDC; // 螢幕和記憶體裝置描述表 HBITMAP hBitmap,hOldBitmap; // 點陣圖控
Android根據螢幕大小動態適配GridView
最近有個需求上面有圖片,下面是個類似九宮格的列表,列表下面還有文字,剛開始只有3列還可以佈滿,後面改了需求有4列,在小屏手機就沒有鋪滿,第4列看不到了,修改圖片和文字長寬也沒適配,後面想到利用layoutparams動態適配,