Android View轉換成圖片保存

cm54 9年前發布 | 5K 次閱讀 Java Android

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

} </pre>

 本文由用戶 cm54 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!