最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Android中布局保存成圖片實(shí)例代碼

 更新時(shí)間:2017年04月01日 10:27:40   作者:邢二創(chuàng)  
本篇文章主要介紹了Android中布局保存成圖片實(shí)例代碼,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧

一、前言

有一個(gè)朋友問(wèn)做過(guò)截屏的小功能沒(méi),自己沒(méi)有做過(guò)。但是想了一下,實(shí)現(xiàn)的過(guò)程。實(shí)現(xiàn)截屏就是為了截取咱們應(yīng)用中的部分布局,然后實(shí)現(xiàn)將保存在本地,或?qū)⑵浞窒恚驅(qū)⑵渫ㄟ^(guò)第三方的平臺(tái)分享出去。自己可能是受了截屏這兩個(gè)字的影響,想當(dāng)然的去梳理自己的實(shí)現(xiàn)思路。

1:截屏,調(diào)用系統(tǒng)的截屏功能區(qū)實(shí)現(xiàn)截屏。

2:對(duì)圖片進(jìn)行處理:截屏是截取的手機(jī)的全屏,因?yàn)槲覀兪切枰厝∥覀兊膽?yīng)用的某一部分,所以我們需要去通過(guò)剪切裁剪,去裁剪出自己想要保留的一部分(實(shí)質(zhì)也就是保存布局)。

3:后續(xù)也許還要處理系統(tǒng)截屏功能本身所有的分享等其他的功能。反正就是會(huì)有各種問(wèn)題。

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

二、實(shí)現(xiàn)流程以及實(shí)現(xiàn)代碼

0:設(shè)置權(quán)限

<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:設(shè)置布局相關(guān)設(shè)置

 // 獲取圖片某布局
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() {
        // 要在運(yùn)行在子線程中
        final Bitmap bmp = relativeLayout.getDrawingCache(); // 獲取圖片
        savePicture(bmp, "test.jpg");// 保存圖片
        relativeLayout.destroyDrawingCache(); // 保存過(guò)后釋放資源
      }
    },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();

  }

}

三、總結(jié)

很顯然,如果利用保存布局的方式去解決這個(gè)問(wèn)題,我們就算是第一次做,也用不到三十分鐘就能搞定,如果去用調(diào)用系統(tǒng)截屏的方案去解決的話,同樣是第一次做,估計(jì)一天也很危險(xiǎn),同時(shí)也會(huì)存在有很多未知的問(wèn)題和局限性。

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

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

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

相關(guān)文章

  • Android編程讀取Assets所有文件(遍歷每一個(gè)文件夾)并存入sdcard的方法

    Android編程讀取Assets所有文件(遍歷每一個(gè)文件夾)并存入sdcard的方法

    這篇文章主要介紹了Android編程讀取Assets所有文件(遍歷每一個(gè)文件夾)并存入sdcard的方法,涉及Android針對(duì)文件與目錄的遍歷及I/O操作相關(guān)技巧,需要的朋友可以參考下
    2016-02-02
  • Android相機(jī)管理工具類(lèi)

    Android相機(jī)管理工具類(lèi)

    這篇文章主要為大家詳細(xì)介紹了Android相機(jī)管理工具類(lèi),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-02-02
  • Android View的事件分發(fā)詳解

    Android View的事件分發(fā)詳解

    我們?cè)趯W(xué)習(xí)View的時(shí)候,不可避免會(huì)遇到事件的分發(fā),而往往遇到的很多滑動(dòng)沖突的問(wèn)題都是由于處理事件分發(fā)時(shí)不恰當(dāng)所造成的。因此,深入了解View事件分發(fā)機(jī)制的原理,對(duì)于我們來(lái)說(shuō)是很有必要的。
    2017-12-12
  • Android修改Dialog樣式的方法

    Android修改Dialog樣式的方法

    Android 對(duì)話框支持自定義標(biāo)題,內(nèi)容,按鈕和點(diǎn)擊事件,基本上可以滿足我們?nèi)粘5氖褂谩?但有時(shí)候我們想要修改對(duì)話框的文字,按鈕顏色等,系統(tǒng)并沒(méi)有提供對(duì)應(yīng)的方法,正常情況下只能自定義布局。 接下來(lái)通過(guò)源碼解析介紹幾種修改 Dialog樣式的方法。
    2021-05-05
  • android canvas使用line畫(huà)半圓

    android canvas使用line畫(huà)半圓

    這篇文章主要為大家詳細(xì)介紹了android canvas使用line畫(huà)半園,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-02-02
  • Android實(shí)現(xiàn)自動(dòng)填充短信驗(yàn)證碼功能

    Android實(shí)現(xiàn)自動(dòng)填充短信驗(yàn)證碼功能

    這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)自動(dòng)填充短信驗(yàn)證碼功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-12-12
  • Android實(shí)現(xiàn)水波紋擴(kuò)散效果

    Android實(shí)現(xiàn)水波紋擴(kuò)散效果

    這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)水波紋擴(kuò)散效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-01-01
  • 一文詳解無(wú)痕埋點(diǎn)在Android中的實(shí)現(xiàn)

    一文詳解無(wú)痕埋點(diǎn)在Android中的實(shí)現(xiàn)

    很多時(shí)候因?yàn)楫a(chǎn)品都會(huì)要獲取用戶的行為,需要客戶端進(jìn)行相關(guān)的埋點(diǎn),下面這篇文章主要給大家介紹了關(guān)于無(wú)痕埋點(diǎn)在Android中實(shí)現(xiàn)的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-02-02
  • Android local.properties 文件讀取實(shí)例詳解

    Android local.properties 文件讀取實(shí)例詳解

    這篇文章主要介紹了Android local.properties 文件讀取實(shí)例詳解的相關(guān)資料,需要的朋友可以參考下
    2017-05-05
  • Android中Bitmap用法實(shí)例分析

    Android中Bitmap用法實(shí)例分析

    這篇文章主要介紹了Android中Bitmap用法,結(jié)合實(shí)例形式分析了Android操作圖片的載入、屬性設(shè)置、旋轉(zhuǎn)等相關(guān)技巧,需要的朋友可以參考下
    2016-02-02

最新評(píng)論

德兴市| 南丹县| 哈尔滨市| 东乌珠穆沁旗| 马山县| 易门县| 阿尔山市| 黄龙县| 泰安市| 贺兰县| 新郑市| 曲周县| 东平县| 繁昌县| 榆林市| 腾冲县| 大方县| 交城县| 海口市| 格尔木市| 长治县| 三门峡市| 三原县| 城步| 乡宁县| 旌德县| 格尔木市| 大理市| 玉溪市| 龙泉市| 婺源县| 贵德县| 翼城县| 浦县| 澄江县| 宣城市| 乐清市| 建德市| 建阳市| 漠河县| 上饶市|