我们可以通过view的 RootView();得到包含这个view的最顶层(最外层)的view布局
View rootView = RootView();rootView.setDrawingCacheEnabled(true);rootView.buildDrawingCache();Bitmap bitmap = DrawingCache();
这样我们就得到了刚才我们截图的内容了,当然这样的截图方法只适合在本应用已经跑起来的情况下
而且这个方法实现的截图还有一点需要注意的是,屏幕上方的信号 时间 电池那些东西是无法获取到的,而且截图留下来的文件也显示是空白,然后我们需要对这个文件进行
裁剪
public static Bitmap ImageCrop(Bitmap bitmap) {int w = Width(); // 得到图片的宽,高int h = Height();//下面这句是关键ateBitmap(bitmap, 0, 40, w, h-40, null, false);}
也许我们还需要把该图像存储到文件中
FileOutputStream outputStream = new FileOutputStream(filename);bitmappress(Bitmap.CompressFormat.PNG, 100, outputStream);
这个写入需要添加权限<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
我自己的demo
ample.handlescreen;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
import android.app.Activity;
aphics.Bitmap;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.Window;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.Toast;
public class Main extends Activity {
// 这个截图就是传入一个view参数,获取这个view的rootview
// 然后rootview getDrawingCache就会得到一个当前屏幕的截图bitmap
// 也可以对这个bitmap进行文件的存储,通过流的方式
// 记得要写sd卡的读写权限
private Button handleButton;
private ImageView screen;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
Create(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.main);
initView();
}
private void initView() {
// TODO Auto-generated method stub
handleButton = (Button) findViewById(R.id.btn_handle);
screen = (ImageView) findViewById(R.id.iv_resouce);
handleButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
handleScrenPath(v);
}
});
}
/**
*
* @param view
* 传入需要截图的那个控件,函数会获取到父界面,进行截图保存
* @return
*/
public String handleScrenPath(View view) {
String path = "";
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss", Locale.US);
// 定义一个文件的路径,包含文件名
String filename = "/sdcard/" + sdf.format(new Date()) + ".png";
View rootView = RootView();
rootView.setDrawingCacheEnabled(true);
rootView.buildDrawingCache();
Bitmap bitmap = DrawingCache();
screen.setImageBitmap(ImageCrop(bitmap));
if (bitmap != null) {
Toast.makeText(Main.this, "截图已经获取到", Toast.LENGTH_SHORT).show();
try {
FileOutputStream outputStream = new FileOutputStream(filename);
bitmappress(Bitmap.CompressFormat.PNG, 100, outputStream);
Toast.makeText(Main.this, "截图已经成功保存", Toast.LENGTH_SHORT)
.show();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} else {
Toast.makeText(Main.this, "截图已经获取到", Toast.LENGTH_SHORT).show();
}
return path;
}
/**
* 因为上面的截图方法会有上面的电池栏的空白,所以我们需要裁剪一下 按正方形裁切图片
*/
public static Bitmap ImageCrop(Bitmap bitmap) {
int w = Width(); // 得到图片的宽,高
int h = Height();
System.out.println(w + ":" + h);
// int wh = w > h ? h : w;// 裁切后所取的正方形区域边长
// int retX = w > h ? (w - h) / 2 : 0;//基于原图,取正方形左上角x坐标
// int retY = w > h ? 0 : (h - w) / 2;
int retX = w > h ? (w - h) / 2 : 0;// 基于原图,取正方形左上角x坐标
int retY = w > h ? 0 : (h - w) / 2;
// 下面这句是关键
ateBitmap(bitmap, 0, 40, w, h - 100, null, false);
}
}
本文发布于:2024-02-01 00:00:56,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170671685932350.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |