Android View转换成图片保存

1package zhangphil.viewtoimage; 2 3import java.io.File; 4import java.io.FileOutputStream; 5 6import android.os.Bundle; 7import android.os.Environment; 8import android.os.Handler; 9import android.view.View; 10import android.widget.Button; 11import android.widget.TextView; 12import android.app.Activity; 13import android.graphics.Bitmap; 14import android.graphics.Canvas; 15import android.graphics.Color; 16import android.graphics.Paint; 17 18/** 19 * 把Android的一个View转换成图片保存 20 * 21 * */ 22 23public class MainActivity extends Activity { 24 25 @Override 26 protected void onCreate(Bundle savedInstanceState) { 27 super.onCreate(savedInstanceState); 28 setContentView(R.layout.activity_main); 29 30 final TextView tv = (TextView) findViewById(R.id.textView); 31 tv.setBackgroundColor(Color.GREEN); 32 // tv.setDrawingCacheEnabled(true); 33 34 final Runnable runnable = new Runnable() { 35 @Override 36 public void run() { 37 viewSaveToImage(tv); 38 } 39 }; 40 41 Button button = (Button) findViewById(R.id.button); 42 button.setOnClickListener(new View.OnClickListener() { 43 44 @Override 45 public void onClick(View v) { 46 new Handler().post(runnable); 47 } 48 }); 49 50 } 51 52 public void viewSaveToImage(View view) { 53 view.setDrawingCacheEnabled(true); 54 view.setDrawingCacheQuality(View.DRAWING_CACHE_QUALITY_HIGH); 55 view.setDrawingCacheBackgroundColor(Color.WHITE); 56 57 // 把一个View转换成图片 58 Bitmap cachebmp = loadBitmapFromView(view); 59 60 // 添加水印 61 Bitmap bitmap = Bitmap.createBitmap(createWatermarkBitmap(cachebmp, 62 "@ Zhang Phil")); 63 64 FileOutputStream fos; 65 try { 66 // 判断手机设备是否有SD卡 67 boolean isHasSDCard = Environment.getExternalStorageState().equals( 68 android.os.Environment.MEDIA_MOUNTED); 69 if (isHasSDCard) { 70 // SD卡根目录 71 File sdRoot = Environment.getExternalStorageDirectory(); 72 File file = new File(sdRoot, "test.PNG"); 73 fos = new FileOutputStream(file); 74 } else 75 throw new Exception("创建文件失败!"); 76 77 bitmap.compress(Bitmap.CompressFormat.PNG, 90, fos); 78 79 fos.flush(); 80 fos.close(); 81 82 } catch (Exception e) { 83 e.printStackTrace(); 84 } 85 86 view.destroyDrawingCache(); 87 } 88 89 private Bitmap loadBitmapFromView(View v) { 90 int w = v.getWidth(); 91 int h = v.getHeight(); 92 93 Bitmap bmp = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888); 94 Canvas c = new Canvas(bmp); 95 96 c.drawColor(Color.WHITE); 97 /** 如果不设置canvas画布为白色,则生成透明 */ 98 99 v.layout(0, 0, w, h); 100 v.draw(c); 101 102 return bmp; 103 } 104 105 // 为图片target添加水印 106 private Bitmap createWatermarkBitmap(Bitmap target, String str) { 107 int w = target.getWidth(); 108 int h = target.getHeight(); 109 110 Bitmap bmp = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888); 111 Canvas canvas = new Canvas(bmp); 112 113 Paint p = new Paint(); 114 115 // 水印的颜色 116 p.setColor(Color.RED); 117 118 // 水印的字体大小 119 p.setTextSize(16); 120 121 p.setAntiAlias(true);// 去锯齿 122 123 canvas.drawBitmap(target, 0, 0, p); 124 125 // 在中间位置开始添加水印 126 canvas.drawText(str, w / 2, h / 2, p); 127 128 canvas.save(Canvas.ALL_SAVE_FLAG); 129 canvas.restore(); 130 131 return bmp; 132 } 133}
点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

2020年前端实用代码段,为你的工作保驾护航

有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )