package zhangphil.viewtoimage;import java.io.File;import java.io.FileOutputStream;import android.os.Bundle;import android.os.Environment;import android.os.Handler;import android.view.View;import android.widget.Button;import android.widget.TextView;import android.app.Activity;import android.graphics.Bitmap;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint;/** * 把Android的一个View转换成图片保存 *  * */public class MainActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);final TextView tv = (TextView) findViewById(R.id.textView);tv.setBackgroundColor(Color.GREEN);// tv.setDrawingCacheEnabled(true);final Runnable runnable = new Runnable() {@Overridepublic void run() {viewSaveToImage(tv);}};Button button = (Button) findViewById(R.id.button);button.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {new Handler().post(runnable);}});}public void viewSaveToImage(View view) {view.setDrawingCacheEnabled(true);view.setDrawingCacheQuality(View.DRAWING_CACHE_QUALITY_HIGH);view.setDrawingCacheBackgroundColor(Color.WHITE);// 把一个View转换成图片Bitmap cachebmp = loadBitmapFromView(view);// 添加水印Bitmap bitmap = Bitmap.createBitmap(createWatermarkBitmap(cachebmp,"@ Zhang Phil"));FileOutputStream fos;try {// 判断手机设备是否有SD卡boolean isHasSDCard = Environment.getExternalStorageState().equals(android.os.Environment.MEDIA_MOUNTED);if (isHasSDCard) {// SD卡根目录File sdRoot = Environment.getExternalStorageDirectory();File file = new File(sdRoot, "test.PNG");fos = new FileOutputStream(file);} elsethrow new Exception("创建文件失败!");bitmap.compress(Bitmap.CompressFormat.PNG, 90, fos);fos.flush();fos.close();} catch (Exception e) {e.printStackTrace();}view.destroyDrawingCache();}private Bitmap loadBitmapFromView(View v) {int w = v.getWidth();int h = v.getHeight();Bitmap bmp = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888);Canvas c = new Canvas(bmp);c.drawColor(Color.WHITE);/** 如果不设置canvas画布为白色,则生成透明 */v.layout(0, 0, w, h);v.draw(c);return bmp;}// 为图片target添加水印private Bitmap createWatermarkBitmap(Bitmap target, String str) {int w = target.getWidth();int h = target.getHeight();Bitmap bmp = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888);Canvas canvas = new Canvas(bmp);Paint p = new Paint();// 水印的颜色p.setColor(Color.RED);// 水印的字体大小p.setTextSize(16);p.setAntiAlias(true);// 去锯齿canvas.drawBitmap(target, 0, 0, p);// 在中间位置开始添加水印canvas.drawText(str, w / 2, h / 2, p);canvas.save(Canvas.ALL_SAVE_FLAG);canvas.restore();return bmp;}}

更多相关文章

  1. Unity调用Android保存图片到相册
  2. Android图片压缩
  3. 【Android】android图片轮播
  4. Android:EditText插入图片实现图文混排
  5. Android之GLES2.0显示图片测试代码
  6. Android 自定义ProgressBar--进度自己设置图片
  7. Android 本地图片多选
  8. Android圆角图片封装类
  9. Android UI控件详解-ImageSwitcher(图片切换器)

随机推荐

  1. 第五章 主生产计划MPS 第1~3节 计划方案
  2. 如何在Mac上设置和使用Apple Pay
  3. 飞鸽内网穿透操作使用说明
  4. 冒烟测试怎么做?
  5. 分布式机器学习中的拜占庭问题
  6. 新手正确提问姿势
  7. CentOS 7最小化安装对系统初始化
  8. 一块神奇的树莓派电子板竟让我学会了Linu
  9. 如何基于元学习方法进行有效的模型训练?四
  10. 为什么高手离不了Linux系统?我想这就是理