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}
Android View转换成图片保存
Wesley13
2021-10-11
1291 0 0
点赞
收藏
评论区
加载中...