原文:http://blog.csdn.net/lessu/archive/2010/04/28/5539748.aspx
很多人在做畫圖軟體的時候找不到儲存畫好圖檔的方法。。
其實可以在bitmap上面畫,然後儲存bitmap就可以了,而不需要找螢幕截圖的函數了。。。
package com.android.drawtest;
import java.io.file;
import java.io.filenotfoundexception;
import java.io.fileoutputstream;
import java.io.ioexception;
import android.app.activity;
import android.content.res.resources;
import android.graphics.bitmap;
import android.graphics.bitmapfactory;
import android.graphics.canvas;
import android.graphics.color;
import android.graphics.paint;
import android.graphics.bitmap.config;
import android.os.bundle;
import android.view.motionevent;
import android.view.surfaceholder;
import android.view.window;
import android.view.windowmanager;
public class drawtest extends activity {
private drawview dv;
private bitmap mybitmap;
canvas canvas; //用于在bitmap上面畫圖
private file file;
private fileoutputstream out;
@override
public void oncreate(bundle savedinstancestate) {
super.oncreate(savedinstancestate);
requestwindowfeature(window.feature_no_title);
getwindow().setflags(windowmanager.layoutparams.flag_fullscreen, windowmanager.layoutparams.flag_fullscreen);
setcontentview(r.layout.main);
dv=(drawview)findviewbyid(r.id.drawview);
mybitmap=bitmap.createbitmap(400, 400, config.argb_8888);
canvas=new canvas(mybitmap);
canvas.drawcolor(color.white);
file =new file("//sdcard//","test.jpg");//輸出路徑
try {
out=new fileoutputstream(file);//設定輸出流
} catch (filenotfoundexception e) {
e.printstacktrace();
}
public boolean ontouchevent(motionevent me){
paint paint;
paint=new paint();
paint.setcolor(color.red);
switch(me.getaction())
{
case motionevent.action_down:
//畫點
canvas.drawcircle(me.getx(), me.gety(), 10, paint);
dv.draw(mybitmap);
break;
return false;
public void ondestroy(){
//退出時儲存
mybitmap.compress(bitmap.compressformat.jpeg, 100, out);
out.flush();
out.close();
} catch (ioexception e) {
super.ondestroy();
}
surfaceview
import android.content.context;
import android.util.attributeset;
import android.view.surfaceview;
public class drawview extends surfaceview implements surfaceholder.callback{
private surfaceholder msurfaceholder;
private context mcontext;
public drawview(context context, attributeset attrs) {
super(context, attrs);
// todo auto-generated constructor stub
msurfaceholder=getholder();
mcontext=context;
public void surfacechanged(surfaceholder holder, int format, int width,
int height) {
// todo auto-generated method stub
public void surfacecreated(surfaceholder holder) {
public void surfacedestroyed(surfaceholder holder) {
public void draw(bitmap bitmap){
canvas c=msurfaceholder.lockcanvas();
c.drawbitmap(bitmap, 0,0, null);
msurfaceholder.unlockcanvasandpost(c);