zoukankan      html  css  js  c++  java
  • Android View转换成图片保存

    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 {

    @Override
    protected 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() {
    @Override
    public void run() {
    viewSaveToImage(tv);
    }
    };

    Button button = (Button) findViewById(R.id.button);
    button.setOnClickListener(new View.OnClickListener() {

    @Override
    public 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);
    } else
    throw 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;
    }
    }

  • 相关阅读:
    Spring Boot 2.4版本前后的分组配置变化及对多环境配置结构的影响
    Spring Boot 2.4 对多环境配置的支持更改
    Spring Boot 的2020最后一击:2.4.1、2.3.7、2.2.12 发布
    苹果M1芯片各种不支持,但居然可以刷朋友圈!你会买单吗?
    老板居然让我在Java项目中“造假”
    Spring Cloud正式移除Hystrix、Zuul等Netflix OSS组件
    为了Java微信支付V3开发包,我找出了微信支付文档至少六个错误
    IdentityServer4系列 | 支持数据持久化
    IdentityServer4系列 | 混合模式
    Gitlab Runner的分布式缓存实战
  • 原文地址:https://www.cnblogs.com/lenkevin/p/8143901.html
Copyright © 2011-2022 走看看