Android View转换成图片保存
16lz
2021-01-23
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;}}
更多相关文章
- Unity调用Android保存图片到相册
- Android图片压缩
- 【Android】android图片轮播
- Android:EditText插入图片实现图文混排
- Android之GLES2.0显示图片测试代码
- Android 自定义ProgressBar--进度自己设置图片
- Android 本地图片多选
- Android圆角图片封装类
- Android UI控件详解-ImageSwitcher(图片切换器)