博客
关于我
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/

你可能感兴趣的文章
pageHelper分页工具的使用
查看>>
PageHelper:上手教程(最详细)
查看>>
PageOffice如何实现从零开始动态生成图文并茂的Word文档
查看>>
PageRank算法
查看>>
Paint类(画笔)
查看>>
paip.android 手机输入法制造大法
查看>>
Palindrome Number leetcode java
查看>>
Palo Alto Networks Expedition 未授权SQL注入漏洞复现(CVE-2024-9465)
查看>>
Palo Alto Networks PAN-OS身份认证绕过导致RCE漏洞复现(CVE-2024-0012)
查看>>
Panalog 日志审计系统 libres_syn_delete.php 前台RCE漏洞复现
查看>>
Panalog 日志审计系统 sprog_deletevent.php SQL 注入漏洞复现
查看>>
Panalog 日志审计系统 sprog_upstatus.php SQL 注入漏洞复现(XVE-2024-5232)
查看>>
pandas :将多列汇总为一列,没有最后一列
查看>>
pandas :将时间戳转换为 datetime.date
查看>>
pandas :将行取消堆叠到新列中
查看>>
pandas DataFrame 中的自定义浮点格式
查看>>
Pandas DataFrame 的 describe()方法详解-ChatGPT4o作答
查看>>
Pandas DataFrame中的列从浮点数输出到货币(负值)
查看>>
Pandas DataFrame中的列从浮点数输出到货币(负值)
查看>>
Pandas Dataframe的日志文件
查看>>