国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Android > 正文

Android中布局保存成圖片實例代碼

2019-12-12 03:12:23
字體:
來源:轉載
供稿:網友

一、前言

有一個朋友問做過截屏的小功能沒,自己沒有做過。但是想了一下,實現的過程。實現截屏就是為了截取咱們應用中的部分布局,然后實現將保存在本地,或將其分享,或將其通過第三方的平臺分享出去。自己可能是受了截屏這兩個字的影響,想當然的去梳理自己的實現思路。

1:截屏,調用系統的截屏功能區實現截屏。

2:對圖片進行處理:截屏是截取的手機的全屏,因為我們是需要截取我們的應用的某一部分,所以我們需要去通過剪切裁剪,去裁剪出自己想要保留的一部分(實質也就是保存布局)。

3:后續也許還要處理系統截屏功能本身所有的分享等其他的功能。反正就是會有各種問題。

上面有一個詞兒是“保存布局”。意思就是將我們的布局保存成為圖片。我聽到這個之后,今天到公司的第一件事兒就是自己去實現一下所謂的截屏這個功能。

二、實現流程以及實現代碼

0:設置權限

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /><uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

1:獲取布局

relativeLayout = (RelativeLayout) findViewById(R.id.layout_rl);

2:設置布局相關設置

 // 獲取圖片某布局relativeLayout.setDrawingCacheEnabled(true);relativeLayout.buildDrawingCache();

3.獲取圖片

 final Bitmap bmp = relativeLayout.getDrawingCache(); // 獲取圖片 savePicture(bmp, "test.jpg");// 保存圖片

4:保存圖片

public void savePicture(Bitmap bm, String fileName) {    Log.i("xing", "savePicture: ------------------------");    if (null == bm) {      Log.i("xing", "savePicture: ------------------圖片為空------");      return;    }    File foder = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/test");    if (!foder.exists()) {      foder.mkdirs();    }    File myCaptureFile = new File(foder, fileName);    try {      if (!myCaptureFile.exists()) {        myCaptureFile.createNewFile();      }      BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(myCaptureFile));      //壓縮保存到本地      bm.compress(Bitmap.CompressFormat.JPEG, 90, bos);      bos.flush();      bos.close();    } catch (IOException e) {      e.printStackTrace();    }    Toast.makeText(this, "保存成功!", Toast.LENGTH_SHORT).show();  }

5:釋放資源

relativeLayout.destroyDrawingCache();

6、完整代碼如下

package com.adwan.savephototolocal;import android.graphics.Bitmap;import android.os.Environment;import android.os.Handler;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.util.Log;import android.view.View;import android.widget.RelativeLayout;import android.widget.Toast;import java.io.BufferedOutputStream;import java.io.File;import java.io.FileOutputStream;import java.io.IOException;public class MainActivity extends AppCompatActivity {  private RelativeLayout relativeLayout;  private Handler mHandler = new Handler();  @Override  protected void onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    setContentView(R.layout.activity_main);    relativeLayout = (RelativeLayout) findViewById(R.id.layout_rl);  }  public void save(View view) {    initView();  }  private void initView() {    // 獲取圖片某布局    relativeLayout.setDrawingCacheEnabled(true);    relativeLayout.buildDrawingCache();    mHandler.postDelayed(new Runnable() {      @Override      public void run() {        // 要在運行在子線程中        final Bitmap bmp = relativeLayout.getDrawingCache(); // 獲取圖片        savePicture(bmp, "test.jpg");// 保存圖片        relativeLayout.destroyDrawingCache(); // 保存過后釋放資源      }    },100);  }  public void savePicture(Bitmap bm, String fileName) {    Log.i("xing", "savePicture: ------------------------");    if (null == bm) {      Log.i("xing", "savePicture: ------------------圖片為空------");      return;    }    File foder = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/test");    if (!foder.exists()) {      foder.mkdirs();    }    File myCaptureFile = new File(foder, fileName);    try {      if (!myCaptureFile.exists()) {        myCaptureFile.createNewFile();      }      BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(myCaptureFile));      //壓縮保存到本地      bm.compress(Bitmap.CompressFormat.JPEG, 90, bos);      bos.flush();      bos.close();    } catch (IOException e) {      e.printStackTrace();    }    Toast.makeText(this, "保存成功!", Toast.LENGTH_SHORT).show();  }}

三、總結

很顯然,如果利用保存布局的方式去解決這個問題,我們就算是第一次做,也用不到三十分鐘就能搞定,如果去用調用系統截屏的方案去解決的話,同樣是第一次做,估計一天也很危險,同時也會存在有很多未知的問題和局限性。

這個問題雖然很小,但是讓我收到的感觸確實很大。感觸就是在我們解決問題之前,一定要定義好自己的問題。就以這個問題,如果這個問題換個問法。保存布局,而不是截屏。估計我們每個人都能會想到以上的解決方案。所以在在我們定義問題的時候一定要完全弄明白是怎么回事兒。雖然同樣是可以解決問題,但是有可能會出現一些殺雞用牛刀的現象。問題的定義也就是數模的轉換。

第二就是處理問題一定要去做出幾個不同的預選備案,從而再去選擇一個嘴適合自己的去處理問題。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 民县| 正宁县| 文成县| 荃湾区| 万源市| 健康| 鞍山市| 陆丰市| 星座| 通渭县| 乳山市| 揭阳市| 乳源| 宕昌县| 开鲁县| 绥棱县| 黄骅市| 开平市| 三穗县| 阿克陶县| 定陶县| 繁昌县| 怀仁县| 奎屯市| 蒲江县| 兴安县| 微博| 葫芦岛市| 新田县| 伊春市| 衡山县| 乃东县| 荔波县| 沁阳市| 巴中市| 苍梧县| 泸定县| 雅安市| 峨眉山市| 瑞丽市| 祁连县|