android view图片缓存,Android 获取屏幕图像缓存,截长图

Android控件自带View缓存功能

首先

v.getRootView() == getWindow().getDecorView()//return true

rootView.setDrawingCacheEnabled(true);//设置允许缓存

view.buildDrawingCache();//创建缓存

Bitmap bitmap = view.getDrawingCache();//获取缓存

但是,此时通过得到rootview可以得到bitmap ,但是通过某个控件获取比如scrollview 可能bitmap返回null (google允许缓存最大cache为屏幕像素width * height * 4,超过不构建)

slove

通过限定宽高(局限是无法得到长图)

view.measure(View.MeasureSpec.makeMeasureSpec(

0,View.MeasureSpec.UNSPECIFIED),

View.MeasureSpec.makeMeasureSpec(

0,View.MeasueSpec.UNSPECIFIED));

// view.layout(0, 0, view.getMeasuredWidth(), view.getMeasuredHeight());//设置摆放宽高

通过view.draw()来绘制到画布保存图片(此时长图就可以得到啦~~🌶)

public Bitmap loadBitmapFromView(View v, boolean isParemt) {

if (v == null) {

return null;

}

Bitmap screenshot;

screenshot = Bitmap.createBitmap(v.getWidth(), v.getHeight(), Bitmap.Config.ARGB_8888);

Canvas c = new Canvas(screenshot);

// c.translate(-v.getScrollX(), -v.getScrollY()); //添加截取当前位置开始

v.draw(c);

return screenshot;

}

最后保存图片

private boolean saveBitmap(Bitmap bitmap, String name) {

File file = new File(FileUtils.DEFAULT_PHOTODIR, name + ".jpg");

if (!file.getParentFile().exists()) {

file.getParentFile().mkdirs();

}

try {

boolean isCreated = file.createNewFile();

Log.e("file", isCreated ? "创建成功" : "create fail");

FileOutputStream fos = new FileOutputStream(file);

boolean compress = bitmap.compress(Bitmap.CompressFormat.JPEG, 100, fos);

Log.e("file", compress + "图片保存结果");

fos.flush();

fos.close();

return true;

} catch (IOException e) {

e.printStackTrace();

}

return false;

}

长图大功告成!

···系统命令截图

调用系统截图

需要cmd指令 adb shell screencap -p storage/emulated/0/DCIM/Camera/testView.jpg(调用此命令时,系统自动截取当前屏幕,app调用需要系统权限)

Runtime. getRuntime().exec("screencap -p " + mSavedPath); //不过app获取系统cmd权限非常麻烦

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值