关闭

Android将View保存为图片到SD卡

461人阅读 评论(0) 收藏 举报
分类:

第一步:

申请权限

<!-- 往SDCard写入数据权限 -->
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
第二步:

布局文件

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity">


    <TextView
        android:layout_width="match_parent"
        android:layout_height="56dp"
        android:background="@color/mainColor"
        android:gravity="center"
        android:text="自动详情图"
        android:textColor="#fff"
        android:textSize="20sp" />

    <EditText
        android:id="@+id/etContent"
        android:layout_width="match_parent"
        android:layout_height="56dp"
        android:hint="输入文字"
        android:textColorHint="#C1C1C1" />

    <Button
        android:layout_width="match_parent"
        android:layout_height="56dp"
        android:onClick="Button"
        android:text="Button" />

    <RelativeLayout
        android:id="@+id/rlContent"
        android:layout_width="match_parent"
        android:layout_height="70dp"
        android:layout_marginTop="10dp"
        android:background="#D73ADC"
        android:gravity="center">

        <TextView
            android:id="@+id/tvContent"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="文字"
            android:textColor="#fff"
            android:textSize="18sp" />
    </RelativeLayout>

    <ImageView
        android:id="@+id/ivPreview"
        android:layout_width="match_parent"
        android:layout_height="70dp"
        android:layout_marginTop="10dp"
        android:background="#C0C0C0"
        android:gravity="center" />

</LinearLayout>
第三步:

Java代码

package com.xiong.autodetail.activity;

import android.content.Context;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.os.Handler;
import android.view.View;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import android.widget.TextView;

import com.squareup.picasso.Picasso;
import com.xiong.autodetail.R;
import com.xiong.autodetail.utils.FileUtil;
import com.xiong.autodetail.utils.ToastUtil;

import java.io.File;
import java.io.FileOutputStream;

public class MainActivity extends BaseActivity {

    private EditText etContent;
    private TextView tvContent;
    private RelativeLayout rlContent;
    private ImageView ivPreview;
    private Context context = this;
    final private static int REFRESH_COMPLETE = 0;//Message标记
    final private static int SET_TEXT_TIME = 1;//设置文本延时时间(单位毫秒),避免图片上文字生成不完整

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        initView();

    }

    //初始化控件
    private void initView() {
        etContent = (EditText) findViewById(R.id.etContent);
        tvContent = (TextView) findViewById(R.id.tvContent);
        rlContent = (RelativeLayout) findViewById(R.id.rlContent);
        ivPreview = (ImageView)findViewById(R.id.ivPreview);
    }

    //按钮响应事件
    public void Button(View view) {
        if(etContent.length() > 0){
            String content = etContent.getText().toString();
            tvContent.setText(content);
            mHandler.sendEmptyMessageDelayed(REFRESH_COMPLETE, SET_TEXT_TIME);
        }else{
            ToastUtil.show("未输入!");
        }
    }

    //Hadle
    private Handler mHandler = new Handler() {
        public void handleMessage(android.os.Message msg) {
            switch (msg.what) {
                case REFRESH_COMPLETE:
                    save(getBitmap(rlContent));
                    etContent.setText("");
                    break;
            }
        }
    };

    //将View转为Bitmap
    public Bitmap getBitmap(View view) {
        view.setDrawingCacheEnabled(true);
        Bitmap bitmap = Bitmap.createBitmap(view.getDrawingCache());
        view.setDrawingCacheEnabled(false);
        return bitmap;
    }

    //将Bitmap保存为图片
    private void save(Bitmap bitmap) {
        try {
            String fileName = tvContent.getText().toString().substring(0, 2) + ".png";
            FileOutputStream stream = new FileOutputStream(FileUtil.getDownPath() + fileName);
            bitmap.compress(Bitmap.CompressFormat.PNG, 100, stream);
            stream.flush();
            stream.close();
            ToastUtil.show("操作完成");
            previewImg(FileUtil.getDownPath() + fileName);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    //预览图片
    private void previewImg(String filePath){
        Picasso.with(context).load(new File(filePath)).into(ivPreview);
    }

}


工具类方法:

    public static String getDownPath() {
        String path = Environment.getExternalStorageDirectory() + "/000_AAA/";
        isDownFolder(path);
        return path;
    }

    //判断文件夹是否存在,如果不存在则创建文件夹
    public static void isDownFolder(String downFolder) {
        File file = new File(downFolder);
        if (!file.exists()) {
            file.mkdir();
        }
    }

Picasso是一个第三方框架,这里只是用来加载预览图的。

效果图:






0
0
查看评论

安卓保存图片到SD卡,使用byte流

头几天遇到一个问题:在安卓开发应用中保存图片到SD卡,并且 用户在图库中搜到,类似于缓存的那种形式。最开始的第一想法是改一下后缀名,例如把一个图片保存为image1.txt,这样保存当然没问题,但在应用中读取中就不行了,后来也没研究为什么不能正常读取,毕竟这种办法太土鳖了。。。 今天有空上网搜了一...
  • wunghao8
  • wunghao8
  • 2015-02-05 15:43
  • 2369

android 读取,写入图片到sd卡源码

在AndroidMainfest.xml文件中添加--> 注意:在前添加--> /** * Save Bitmap to a file.保存图片到SD卡。 * * @param bitmap * @param file ...
  • a673341766
  • a673341766
  • 2014-08-10 16:08
  • 6229

android中将bitmap保存到SD卡指定的目录下

// 该函数用来对得到的图像进行存储 public void saveMyBitmap(String bitName, byte[] b) { //首先将byte数组转为bitmap Bitmap mBitmap = Bytes2Bimap(b); //创建文件对象,用来...
  • xdhywj
  • xdhywj
  • 2013-05-05 12:03
  • 2530

Android中将View的内容保存为图像的方法

原理:创建一个新的Bitmap,然后再根据它来创建一个Canvas,最后调用View的draw方法将View画到Canvas上,这样得到的Bitmap就是我们想要的。代码: public Bitmap createViewBitmap(View v) { Bitmap bitm...
  • singwhatiwanna
  • singwhatiwanna
  • 2014-01-23 10:16
  • 7495

Android学习之SD卡写入bitmap位图

SD卡读写   往SD卡写bitmap 在AndroidMainifest.xml中添加权限 private boolean saveBitmap(Bitmap mybitmap,String name){ boolean result = false; //创建位...
  • qq_28468727
  • qq_28468727
  • 2016-09-08 14:49
  • 601

Android Log(二) 将Log信息写到sd卡中并带时间

在Android Log(一) 自定义带类名与方法名的Log中自定义了自己的LogUtil,但调试程序时,可能没有线数线,可以将log信息写到sd卡,方便后期查找错误。public class LogUtil { private static final String TAG = &quo...
  • Gary__123456
  • Gary__123456
  • 2017-01-14 22:23
  • 893

android读取Assets图片资源保存到SD卡然后显示到ImageView里 实例

版权声明:本文为博主原创文章,未经博主允许不得转载。
  • zhangxinyuan6668
  • zhangxinyuan6668
  • 2016-11-21 15:57
  • 1156

Android开发中将LOG存入SD卡

说一下,这不是我个人原创,本人非常尊重原创,但是我这人又比较糊涂,实在找不到这篇文章的出处了。 直接上代码:` package com.example.blood_demo.util;import java.io.BufferedReader; import java.io.File; im...
  • xf396191344
  • xf396191344
  • 2015-09-07 11:10
  • 1583

Android 保存View到本地SD卡

最近在编写一个小项目的过程中需要将一个自定义的View绘制完成后的效果保存到本地的文件中。刚开始在网上看了很多代码,结果在我的项目中就是不行,非常纳闷。后来才发现,自己的自定义View中的onDraw()方法中由于逻辑问题,导致不是每次调用onDraw方法时都会进行绘制。所以,折腾了小半天,后来分析...
  • wj2030
  • wj2030
  • 2015-08-16 16:30
  • 705

android保存文件到SD卡中

想把文件保存到SD卡中,一定要知道SD卡的路径,有人说可以用File explore来查看,这种方法不太好,因为随着android版本的升级,SD卡的路径可能会发生改变。在1.6的时候SD的路径是/sdCard。后续版本都改成了mnt/sdCard。所有还是使用API来获取: Environmen...
  • howlaa
  • howlaa
  • 2013-12-13 10:23
  • 12887
    个人资料
    • 访问:102896次
    • 积分:1966
    • 等级:
    • 排名:千里之外
    • 原创:108篇
    • 转载:1篇
    • 译文:0篇
    • 评论:34条
    最新评论