博客
关于我
Android 布局文件(view)生成Bitmap
阅读量:132 次
发布时间:2019-02-27

本文共 2914 字,大约阅读时间需要 9 分钟。

已测量过的View生成Bitmap

在布局中绘制已测量的View至Bitmap,通常不需要额外测量和布局操作。以下代码示例展示了如何直接绘制已测量的View内容。

private static Bitmap drawMeasureView(View view) {    int width = view.getWidth();    int height = view.getHeight();    Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.RGB_565);    Canvas canvas = new Canvas(bitmap);    view.draw(canvas);    return bitmap;}

未测量过的View生成Bitmap

对于未在布局中显示的View,需要手动进行测量和布局操作后再进行绘制。以下代码示例展示了完整的测量、布局和绘制流程。

public static Bitmap getBitmap(View view) {    DisplayMetrics metric = new DisplayMetrics();    getWindowManager().getDefaultDisplay().getMetrics(metric);    int screenWidth = metric.widthPixels; // 屏幕宽度(像素)    int screenHeight = metric.heightPixels; // 屏幕高度(像素)    int widthSpec = View.MeasureSpec.makeMeasureSpec(        screenWidth,         View.MeasureSpec.AT_MOST    );    int heightSpec = View.MeasureSpec.makeMeasureSpec(        screenHeight,         View.MeasureSpec.AT_MOST    );    view.measure(widthSpec, heightSpec);    int measuredWidth = view.getMeasuredWidth();    int measuredHeight = view.getMeasuredHeight();    view.layout(0, 0, measuredWidth, measuredHeight);    int width = view.getWidth();    int height = view.getHeight();    Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.RGB_565);    Canvas canvas = new Canvas(bitmap);    view.draw(canvas);    return bitmap;}

布局更新与内容填充

在动态加载图片并填充布局中的ImageView时,需注意以下操作。以下代码示例展示了如何在图片加载完成后更新View的布局。

public void layoutView(final View viewBitmap, String url, Activity activity) {    final ImageView imageView = viewBitmap.findViewById(R.id.iv_show);    Glide.with(activity)        .asBitmap()        .load(url)        .into(new SimpleTarget
() { @Override public void onResourceReady(@NonNull Bitmap resource, @Nullable Transition
transition) { imageView.setImageBitmap(resource); // 更新并保存布局中的View内容 Bitmap bitmap = getBitmap(viewBitmap); savePhotoToSDCard(bitmap); } });}

图片保存到本地

确保在清单文件中添加必要的权限,并进行动态申请操作。以下代码示例展示了如何将图片保存到SD卡中。

public static void savePhotoToSDCard(Bitmap photoBitmap) {    FileOutputStream fos;    String imagePath = "";    try {        boolean isHasSDCard = Environment.getExternalStorageState().equals(            android.os.Environment.MEDIA_MOUNTED        );        if (isHasSDCard) {            File sdRoot = Environment.getExternalStorageDirectory();            File file = new File(sdRoot, Calendar.getInstance().getTimeInMillis() + ".png");            fos = new FileOutputStream(file);            imagePath = file.getAbsolutePath();        } else {            throw new Exception("创建文件失败!");        }        photoBitmap.compress(Bitmap.CompressFormat.PNG, 90, fos);        fos.flush();        fos.close();    } catch (Exception e) {        e.printStackTrace();    }}

权限设置

确保在Android清单文件中添加以下权限,允许应用程序进行必要的操作。

本文内容参考了多篇技术文章,结合实际开发经验编写,旨在提供清晰的技术解答和实用代码示例。

转载地址:http://wxub.baihongyu.com/

你可能感兴趣的文章
Qt笔记——foreach与forever
查看>>
QT程序怎么挪到Linux下,linux+Qt程序如何打包发布
查看>>
Qt知识:视图框架QGraphicsWidget详解
查看>>
SpringBoot中项目启动及定时任务缓存数据库常用数据至内存变量并转换后高频调用
查看>>
Qt知识: 画刷风格
查看>>
QT的OpenGL渲染窗QOpenGLWidget Class
查看>>
QT的C++程序加载动态链接库DLL(Linux下是so)的方式
查看>>
QT界面操作1:如何跟踪鼠标位置?
查看>>
Qt环境搭建(Visual Studio)
查看>>
QT点击"X"按钮,调用closeEvent()函数来实现调用特定事件(附:粗略介绍QT的信号与槽的使用方法)...
查看>>
QT样式表——url路径
查看>>
QT数据库(三):QSqlQuery使用
查看>>
QT教程5:消息框
查看>>
SpringBoot中集成阿里开源缓存访问框架JetCache实现声明式实例和方法缓存
查看>>
pom.xml中提示web.xml is missing and <failonmissingw>...
查看>>
Pomelo开发中Web客户端开发API简介
查看>>
QT教程2:QT5的体系构架
查看>>
PON架构(全光网络)
查看>>
PoolingHttpClientConnectionManager原理剖析
查看>>
QT教程1:ubuntu18.04安装QT5
查看>>