iis服务器助手广告广告
返回顶部
首页 > 资讯 > 移动开发 >Android中布局保存成图片实例代码
  • 367
分享到

Android中布局保存成图片实例代码

布局图片Android 2022-06-06 01:06:13 367人浏览 薄情痞子
摘要

一、前言 有一个朋友问做过截屏的小功能没,自己没有做过。但是想了一下,实现的过程。实现截屏就是为了截取咱们应用中的部分布局,然后实现将保存在本地,或将其分享,或将其通过第三方的

一、前言

有一个朋友问做过截屏的小功能没,自己没有做过。但是想了一下,实现的过程。实现截屏就是为了截取咱们应用中的部分布局,然后实现将保存在本地,或将其分享,或将其通过第三方的平台分享出去。自己可能是受了截屏这两个字的影响,想当然的去梳理自己的实现思路。

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();
  }
}

三、总结

很显然,如果利用保存布局的方式去解决这个问题,我们就算是第一次做,也用不到三十分钟就能搞定,如果去用调用系统截屏的方案去解决的话,同样是第一次做,估计一天也很危险,同时也会存在有很多未知的问题和局限性。

这个问题虽然很小,但是让我收到的感触确实很大。感触就是在我们解决问题之前,一定要定义好自己的问题。就以这个问题,如果这个问题换个问法。保存布局,而不是截屏。估计我们每个人都能会想到以上的解决方案。所以在在我们定义问题的时候一定要完全弄明白是怎么回事儿。虽然同样是可以解决问题,但是有可能会出现一些杀鸡用牛刀的现象。问题的定义也就是数模的转换。

第二就是处理问题一定要去做出几个不同的预选备案,从而再去选择一个嘴适合自己的去处理问题。

您可能感兴趣的文章:Android布局自定义Shap圆形ImageView可以单独设置背景与图片Android代码实现图片和文字上下布局Android实现加载广告图片和倒计时的开屏布局


--结束END--

本文标题: Android中布局保存成图片实例代码

本文链接: https://www.lsjlt.com/news/21848.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Android 图片网格布局控件示例代码
    项目地址:MultiPictureViewMultiPictureView是一个可以将多张图片以网格的方式显示的View,通过简单的接口实现烦人的布局,从此解放你的小手手显示效果 支持设置图片数量上限 支持设置最多显示列数 支持动态布...
    99+
    2023-05-31
    android 图片 网格
  • Python自动爬取图片并保存实例代码
    目录一、准备工作二、代码实现 三、总结一、准备工作 用python来实现对百度图片的爬取并保存,以情绪图片为例,百度搜索可得到下图所示 f12打开源码 在此处可以看到这...
    99+
    2024-04-02
  • Android中复制图片的实例代码
    activity_main.xml中的配置<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://sc...
    99+
    2023-05-30
    android 复制图片 roi
  • CSS图片布局实例分析
    这篇文章主要介绍了CSS图片布局实例分析的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇CSS图片布局实例分析文章都会有所收获,下面我们一起来看看吧。层叠样式表(英文全称:Cascading Style Shee...
    99+
    2023-06-27
  • android怎么在布局中添加图片
    在Android布局中添加图片可以通过使用ImageView控件来实现。以下是一个简单的示例:1. 首先,将图片文件添加到项目的`r...
    99+
    2023-08-16
    android
  • android如何在布局中添加图片
    在Android布局中添加图片有多种方式,以下是其中几种常用的方法:1. 使用ImageView控件:将ImageView控件添加到...
    99+
    2023-09-27
    android
  • python篇---base64码流转成图片保存
    python篇—base64码流转成图片保存 import osimport base64from io import BytesIOfrom PIL import Imagefrom faker i...
    99+
    2023-09-02
    python 深度学习 开发语言
  • Android中协调滚动布局的实现代码
    目录使用 AppbarLayout 和 MotionLayout 实现常用的布局效果一、AppbarLayout + ViewPager二、AppbarLayout + Recycl...
    99+
    2024-04-02
  • Android图片实现压缩处理的实例代码
    整理文档,搜刮出一个Android图片实现压缩处理的实例代码,稍微整理精简一下做下分享。详解:获取本地图片File文件 获取BitmapFactory.Options对象 计算原始图片 目标图片宽高比 计算输出的图片宽高根据...
    99+
    2023-05-30
    android 图片 压缩
  • Android图片采样缩放功能实例代码
    为什么要对Android中的图片进行采样缩放呢?是为了更加高效的加载Bitmap。假设通过imageView来显示图片,很多时候ImageView并没有图片的原始尺寸那么大,这时候把整张图片加载进来后再设给ImageView是没有必要的,因...
    99+
    2023-05-30
    android 采样 缩放
  • Android中怎么保存图片到系统图库
    这篇文章将为大家详细讲解有关Android中怎么保存图片到系统图库,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。第一种是自己写方法,如下代码:public static ...
    99+
    2023-05-30
    android
  • Flutter 生成图片保存至相册的示例
    目录基本思路添加依赖实现代码遇到一个需求,需要用 Flutter 生成图片,最终实现的效果如下: 基本思路 使用 Canvas 绘制图片中各元素,然后使用 PictureReco...
    99+
    2024-04-02
  • Android实现图片预览与保存功能
    目录前言引入插件总结前言 在App开发中,通常为了省流提高加载速度提升用户体验我们通常在列表中或新闻中的插图都是以缩略图压缩过的图片来进行展示,当用户点击图片时我们再去加载真正像素的...
    99+
    2024-04-02
  • C#实现屏幕抓图并保存的示例代码
    目录实践过程效果代码实践过程 效果 代码 public partial class Form1 : Form { public Form1() { ...
    99+
    2022-12-09
    C#屏幕抓图 C#屏幕截图 C#图片保存
  • java 生成文字图片的示例代码
    本文主要介绍了java 生成文字图片的示例代码,分享给大家,具体如下:import java.awt.Color; import java.awt.Font; import java.awt.FontMetrics; import java...
    99+
    2023-05-31
    java 生成文字图片 ava
  • C#实现封面图片生成器的示例代码
    目录实现功能开发环境实现代码实现效果这个东西我已经用了有段时间了,从开始写文章就在用这个,主要原因还是因为我比较懒。懒得去寻找图片,同时又怕万一惹来版权争议。。。 跟我所有的文章的...
    99+
    2024-04-02
  • 详解Android中图片的三级缓存及实例
    详解Android中图片的三级缓存及实例为什么要使用三级缓存 如今的 Android App 经常会需要网络交互,通过网络获取图片是再正常不过的事了 假如每次启动的时候都从网络拉取图片的话,势必会消耗很多流量。在当前的状况下,对于非wi...
    99+
    2023-05-30
    android 三级缓存 roi
  • Android怎么实现图片预览与保存功能
    这篇“Android怎么实现图片预览与保存功能”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Android怎么实现图片预览与...
    99+
    2023-06-30
  • android保存图片到相册功能怎么实现
    要实现在Android应用中保存图片到相册的功能,可以按照以下步骤进行操作: 首先,确保应用已经获取了写入外部存储的权限。在And...
    99+
    2024-04-02
  • php生成二维码合成文字、背景图并保存本地图片
    目录 1、实现效果,二维码二维码合成文字、背景图 2、下载并引入qrcode 3、创建static文件夹下载字体和背景图到这 4、创建test2.php,合成代码   1、实现效果,二维码二维码合成文字、背景图 2、下载并引入qr...
    99+
    2023-09-23
    php 开发语言
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作