• 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;
    }
    }

  • 相关阅读:
    《区块链100问》第38集:比特币钱包是干嘛的?
    《区块链100问》第39集:冷钱包热钱包
    《区块链100问》第40集:全节点钱包和轻钱包
    《区块链100问》第41集:比特币可以用于支付吗?
    《区块链100问》第42集:区块链和比特币的关系
    《区块链100问》第43集:区块链技术发展史
    KindEditor使用
    Django之验证码
    Django之ModelForm
    Django之Form详解
  • 原文地址:https://www.cnblogs.com/lenkevin/p/8143901.html
Copyright © 2020-2023  润新知