private void saveImg(View v, String name) {
Bitmap bitmap = getBitmap(v);
ByteArrayOutputStream stream = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.PNG, 100, stream);
File file = new File(name);
if (file.exists()) {
file.delete();
} else {
try {
file.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
}
FileOutputStream fos = null;
try {
fos = new FileOutputStream(file);
fos.write(stream.toByteArray());
fos.close();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (fos != null) {
try {
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
private Bitmap getBitmap(View v) {
Bitmap bitmap = Bitmap.createBitmap(v.getWidth(), v.getHeight(),
Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(bitmap);
v.draw(canvas);
return bitmap;
}
@Override
public void onClick(View arg0) {
saveImg(iv, Environment.getExternalStorageDirectory().getPath()
+ File.separatorChar + "view.png");
}
总结:这里需要知道如何获取View上内容,使用Canvas将View的内容绘制到Bitmap上,然后的操作就是将Bitmap转化为byte写到文件中就可以了。
注意:当相关的权限都加入的时候,图片的路径要写对,下面的这种写法就报错了。
@Override
public void onClick(View arg0) {
saveImg(iv, Environment.getExternalStorageDirectory().getPath()
+ "view.png");
}
其实本质上是因为上面的路径少了分隔符,写成这样子就可以了,
saveImg(iv, Environment.getExternalStorageDirectory().getPath()
+ File.separatorChar + "view.png");