欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Android實現(xiàn)將View轉(zhuǎn)化為圖片并保存到本地

 更新時間:2022年02月16日 08:12:55   作者:風(fēng)云正  
這篇文章主要為大家詳細介紹了Android實現(xiàn)將View轉(zhuǎn)化為圖片并保存到本地,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下

本文實例為大家分享了Android將View轉(zhuǎn)化為圖片并保存到本地的具體代碼,供大家參考,具體內(nèi)容如下

一、概述

app中有需求需要將View轉(zhuǎn)化為圖片并保存到本地,這里分兩種情況:

1.View本身已經(jīng)顯示在界面上
2.View還沒有添加到界面上或者沒有顯示(繪制)過

二、實現(xiàn)方法

對于上述的第一種情況我使用下面代碼即可:

private void viewSaveToImage(View view) {
? ? ? ? view.setDrawingCacheEnabled(true);
? ? ? ? view.setDrawingCacheQuality(View.DRAWING_CACHE_QUALITY_HIGH);
? ? ? ? view.setDrawingCacheBackgroundColor(Color.WHITE);

? ? ? ? // 把一個View轉(zhuǎn)換成圖片
? ? ? ? Bitmap cachebmp = loadBitmapFromView(view);

? ? ? ? FileOutputStream fos;
? ? ? ? String imagePath = "";
? ? ? ? try {
? ? ? ? ? ? // 判斷手機設(shè)備是否有SD卡
? ? ? ? ? ? boolean isHasSDCard = Environment.getExternalStorageState().equals(
? ? ? ? ? ? ? ? ? ? android.os.Environment.MEDIA_MOUNTED);
? ? ? ? ? ? if (isHasSDCard) {
? ? ? ? ? ? ? ? // SD卡根目錄
? ? ? ? ? ? ? ? File sdRoot = Environment.getExternalStorageDirectory();
? ? ? ? ? ? ? ? File file = new File(sdRoot, Calendar.getInstance().getTimeInMillis()+".png");
? ? ? ? ? ? ? ? fos = new FileOutputStream(file);
? ? ? ? ? ? ? ? imagePath = file.getAbsolutePath();
? ? ? ? ? ? } else
? ? ? ? ? ? ? ? throw new Exception("創(chuàng)建文件失敗!");

? ? ? ? ? ? cachebmp.compress(Bitmap.CompressFormat.PNG, 90, fos);

? ? ? ? ? ? fos.flush();
? ? ? ? ? ? fos.close();

? ? ? ? } catch (Exception e) {
? ? ? ? ? ? e.printStackTrace();
? ? ? ? }
? ? ? ? LogUtil.e("imagePath="+imagePath);

? ? ? ? view.destroyDrawingCache();
? ? }

? ? private Bitmap loadBitmapFromView(View v) {
? ? ? ? int w = v.getWidth();
? ? ? ? int h = v.getHeight();

? ? ? ? Bitmap bmp = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888);
? ? ? ? Canvas c = new Canvas(bmp);

? ? ? ? c.drawColor(Color.WHITE);
? ? ? ? /** 如果不設(shè)置canvas畫布為白色,則生成透明 */

? ? ? ? v.layout(0, 0, w, h);
? ? ? ? v.draw(c);

? ? ? ? return bmp;
?}

如果是第二種,還這樣使用的話,就會報錯了,因為View在添加到容器中之前并沒有得到實際的大小,所以首先需要指定View的大?。?/p>

DisplayMetrics metric = new DisplayMetrics();
? ? ? ? ? ? ? ? ? ? getWindowManager().getDefaultDisplay().getMetrics(metric);
? ? ? ? ? ? ? ? ? ? int width = metric.widthPixels; ? ? // 屏幕寬度(像素)
? ? ? ? ? ? ? ? ? ? int height = metric.heightPixels; ? // 屏幕高度(像素)
? ? ? ? ? ? ? ? ? ? View mingpianView = LayoutInflater.from(this).inflate(R.layout.view_team_mingpian, null, false);
? ? ? ? ? ? ? ? ? ? layoutView(mingpianView, width, height);
//然后View和其內(nèi)部的子View都具有了實際大小,也就是完成了布局,相當與添加到了界面上。接著就可以創(chuàng)建位圖并在上面繪制了:
? ? private void layoutView(View v, int width, int height) {
? ? ? ? // 整個View的大小 參數(shù)是左上角 和右下角的坐標
? ? ? ? v.layout(0, 0, width, height);
? ? ? ? int measuredWidth = View.MeasureSpec.makeMeasureSpec(width, View.MeasureSpec.EXACTLY);
? ? ? ? int measuredHeight = View.MeasureSpec.makeMeasureSpec(10000, View.MeasureSpec.AT_MOST);
? ? ? ? /** 當然,measure完后,并不會實際改變View的尺寸,需要調(diào)用View.layout方法去進行布局。
? ? ? ? ?* 按示例調(diào)用layout函數(shù)后,View的大小將會變成你想要設(shè)置成的大小。
? ? ? ? ?*/
? ? ? ? v.measure(measuredWidth, measuredHeight);
? ? ? ? v.layout(0, 0, v.getMeasuredWidth(), v.getMeasuredHeight());
? ? }

然后再調(diào)用viewSaveToImage(mingpianView);方法即可。

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

相關(guān)文章

  • Android操作Html打開其他APP

    Android操作Html打開其他APP

    這篇文章主要為大家詳細介紹了Android操作Html打開其他APP的相關(guān)資料,感興趣的小伙伴們可以參考一下
    2016-08-08
  • Android雙擊事件攔截方法

    Android雙擊事件攔截方法

    下面小編就為大家分享一篇Android雙擊事件攔截方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-01-01
  • Android實現(xiàn)圓圈倒計時

    Android實現(xiàn)圓圈倒計時

    這篇文章主要為大家詳細介紹了Android實現(xiàn)圓圈倒計時,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-08-08
  • Android使用FontMetrics對象計算位置坐標

    Android使用FontMetrics對象計算位置坐標

    這篇文章主要為大家詳細介紹了Android使用FontMetrics對象計算位置坐標,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-12-12
  • 詳解android進行異步更新UI的四種方式

    詳解android進行異步更新UI的四種方式

    本篇文章主要介紹了詳解android進行異步更新UI的四種方式,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-05-05
  • Android實現(xiàn)文件的分割和組裝

    Android實現(xiàn)文件的分割和組裝

    這篇文章主要介紹了Android實現(xiàn)文件的分割和組裝,針對UDP大數(shù)據(jù)包的分割傳輸與組裝有著非常實用的價值,需要的朋友可以參考下
    2014-09-09
  • AndroidStudio4.1 自定義模板的使用方法

    AndroidStudio4.1 自定義模板的使用方法

    這篇文章主要介紹了AndroidStudio4.1 自定義模板的使用方法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • Android Camera2實現(xiàn)最簡單的預(yù)覽框顯示

    Android Camera2實現(xiàn)最簡單的預(yù)覽框顯示

    這篇文章主要為大家詳細介紹了Android Camera2實現(xiàn)最簡單的預(yù)覽框顯示,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • 學(xué)習(xí)使用Material Design控件(二)使用DrawerLayout實現(xiàn)側(cè)滑菜單欄效果

    學(xué)習(xí)使用Material Design控件(二)使用DrawerLayout實現(xiàn)側(cè)滑菜單欄效果

    這篇文章主要為大家介紹了學(xué)習(xí)使用Material Design控件的詳細教程,使用DrawerLayout和NavigationView實現(xiàn)側(cè)滑菜單欄效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-07-07
  • Android跨應(yīng)用啟動實例詳解

    Android跨應(yīng)用啟動實例詳解

    這篇文章主要介紹了 Android跨應(yīng)用啟動實例詳解的相關(guān)資料,需要的朋友可以參考下
    2017-04-04

最新評論