美文网首页
Android 获取屏幕图像缓存,截长图

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

作者: RoboyCore | 来源:发表于2017-12-25 16:20 被阅读50次
  • 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权限非常麻烦

相关文章

网友评论

      本文标题:Android 获取屏幕图像缓存,截长图

      本文链接:https://www.haomeiwen.com/subject/sfmlgxtx.html