转换为位图时,CardView 阴影未渲染

2024-01-06

问题

我尝试保存一个视图组(其中有一个CardView作为其子级之一)作为 PNG 文件。为了达成这个,

  1. 我膨胀视图组并使用所需信息填充视图
  2. 通过以下方式将图像加载到图像视图Glide https://github.com/bumptech/glide
  3. Add a ViewTreeObserver.OnGlobalLayoutListener to the ViewTreeObserver图像视图的并将要共享的整个(父)视图传递给将视图转换为位图的方法when图像视图的底部大于零(图像视图的高度属性设置为wrap_content,因此在加载图像之前其底部将为零)。

通过这样做,我可以将视图转换为位图,但是有一个警告:CardView的显示未呈现在位图上。

失败的尝试

到目前为止我已经尝试过:

  1. 之间切换layerType属性从“软件”到“硬件”。
  2. 设置开启和关闭cardUseCompatPadding的属性CardView.
  3. 尝试在不使用 Glide 的情况下设置可绘制图像。
  4. 尝试完全不加载可绘制图像。

THE CODE

以下是可能帮助你们识别问题的代码片段:

用于将视图转换为位图的方法

public static Bitmap getBitmapFromView(View view) {
    //Define a bitmap with the same size as the view
    Bitmap b = Bitmap.createBitmap(view.getWidth(), view.getHeight(), Bitmap.Config.ARGB_8888);
    //Bind a canvas to it
    Canvas canvas = new Canvas(b);
    //Get the view's background
    Drawable bgDrawable = view.getBackground();
    if (bgDrawable != null)
        //has background drawable, then draw it on the canvas
        bgDrawable.draw(canvas);
    else
        //does not have background drawable, then draw white background on the canvas
        canvas.drawColor(Color.WHITE);
    // draw the view on the canvas
    view.draw(canvas);
    //return the bitmap
    return b;
}

正在膨胀并传递给视图的 XML 布局文件getBitmapFromView() above.

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:paddingBottom="16dp">

    <com.devspark.robototextview.widget.RobotoTextView
        android:id="@+id/title"
        style="@style/text_subhead"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="top"
        android:layout_marginBottom="@dimen/lessons_horizontal_margin_narrow"
        android:layout_marginLeft="@dimen/lessons_horizontal_margin_narrow"
        android:layout_marginRight="@dimen/lessons_horizontal_margin_narrow"
        android:layout_marginTop="@dimen/lessons_horizontal_margin_narrow"
        android:gravity="left"
        app:typeface="roboto_medium" />

    <com.devspark.robototextview.widget.RobotoTextView
        android:id="@+id/text"
        style="@style/text_subhead"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginLeft="@dimen/lessons_horizontal_margin_narrow"
        android:layout_marginRight="@dimen/lessons_horizontal_margin_narrow"
        android:gravity="left"
        android:textColor="@color/text"
        app:typeface="roboto_regular" />

    <android.support.v7.widget.CardView
        android:id="@+id/image_container"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_margin="@dimen/lessons_horizontal_margin_narrow"
        app:cardCornerRadius="@dimen/lessons_image_card_corner_radius"
        app:cardElevation="3dp"
        app:cardPreventCornerOverlap="false"
        app:cardUseCompatPadding="true">

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical">

            <com.makeramen.roundedimageview.RoundedImageView
                android:id="@+id/image"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:contentDescription="@null"
                app:riv_corner_radius_top_left="@dimen/lessons_image_card_corner_radius"
                app:riv_corner_radius_top_right="@dimen/lessons_image_card_corner_radius" />

            <com.devspark.robototextview.widget.RobotoTextView
                android:id="@+id/caption"
                style="@style/text_caption"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_margin="@dimen/lessons_image_card_caption_margin"
                android:gravity="left"
                app:typeface="roboto_condensed_regular" />

        </LinearLayout>

    </android.support.v7.widget.CardView>

    <!-- Some other views that aren't particularly interesting -->

</LinearLayout>

只需将cardview更改为view,然后设置

android:background="@android:drawable/dialog_holo_light_frame"

当然你需要自己处理填充

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

转换为位图时,CardView 阴影未渲染 的相关文章

  • 在解决依赖关系之前运行 gradle 任务

    我想运行一个 gradle 任务 在 gradle 尝试解决依赖关系之前获取其他源并设置它们 在 build gradle 中有一个任务 用于获取子项目的源代码 该任务需要在 Gradle 尝试解决依赖关系之前运行 因为子项目是依赖关系的一
  • 检测正在插入的设备

    我希望能够检测设备是否已插入 我希望能够像查询连接状态一样进行查询 这可能吗 或者我是否需要创建一个监听电池事件的广播接收器 显然是ACTION BATTERY CHANGED http developer android com refe
  • 是否仍然建议使用 AsyncTask 在后台加载 listView 项目?

    背景 我听说有一些在后台加载数据的新解决方案比 AsyncTask 更值得推荐 例如loaders http developer android com reference android content Loader html 问题 As
  • 如何增加 Gradle 守护进程的最大堆大小?

    签署 apk 时 我收到以下消息 To run dex in process the Gradle daemon needs a larger heap It currently has 1024 MB For faster builds
  • 读取 Android 4.2 中的 APN?

    我有个问题阅读 APN在安卓v4 2中 是读 不是写APNS 它抛出一个安全异常 没有写入 APN 设置的权限 用户 10068 和当前用户都没有权限 进程有 android permission WRITE APN SETTINGS 相同
  • XAMARIN - 添加来自 youtube 的视频

    我搜索如何从 youtube 添加视频的信息 例如 我想从一些 YouTube 链接添加视频 我认为它应该在网络视图中 但我需要一些详细信息 因为我找不到有关我的问题的任何信息 您可以使用 webview 播放 youtube 视频 str
  • android新手需要了解“?android:attr/actionBarSize”

    我正在经历拉尔斯 沃格尔的教程 http www vogella com articles AndroidFragments article html在使用 Fragments 时 我遇到了以下代码 android layout margi
  • 意图过滤器到底是什么?

    我读过很多关于意图过滤器的文章 但我真的无法理解它们到底是做什么的 那么 如果有人可以用一个清晰 的例子向我解释意图过滤器的作用到底是什么 thanks 我认为这是有据可查的here http developer android com g
  • 通过 Intent 从文件管理器中选择文件

    我想做的 我想获取文件字符串形式的路径 我通过 Android 文件管理器选择该路径 我拥有的 Intent intent new Intent Intent ACTION GET CONTENT intent setType startA
  • 按钮上方带有文本的单选按钮

    我是 Android 新手 我需要在我的活动中添加单选按钮 但我需要将文本放在项目符号按钮的顶部 请提供任何帮助 我发现了以下内容 尽管我不明白 drawable in 选择器和 style Tab 样式是什么 顶部带有文本的单选按钮 ht
  • 按下 Tab 键时 PictureBox 抛出“参数无效”ArgumentException

    我有一个表单 用户可以首先扫描到位图 扫描完成并加载位图后 我将启用 4 个文本框 每个文本框旁边都有一个名为 从图像剪切 的按钮 当用户单击该按钮时 他们可以在位图中单击并拖动以使用 MODI 获取选定的文本 除了一个恼人的错误之外 这一
  • 在应用程序之间共享自定义帐户验证器

    我有一个为使用自定义 AccountAuthenticator 的客户端构建的应用程序 它工作得非常好 并且满足了客户的需求 但是 这只是将使用相同身份验证管理器的应用程序集合中的第一个应用程序 这就是我不确定如何继续的地方 我无法知道任何
  • Android/三星 Galaxy S 模拟器

    有没有办法在三星银河模拟器或类似的东西上尝试我的项目 我的项目在 HTC Legend 上运行 但在该设备上崩溃了 我如何在 android eclipse 上设置三星 Galaxy s 我设置了 W800 854 2 2 AVD 但它可以
  • 无法在 Android 中使用自定义数组适配器进行搜索?

    我无法从以下位置搜索listview 我尝试了各种方法 但它对我不起作用 没有错误 我有其他方式进行搜索 但我想让这种方式成为可能 这是代码 public class MainActivity extends Activity implem
  • toArray 与预先确定大小的数组

    使用时ar toArray new String ar size 安卓工作室3 2 1警告预先确定大小的数组并建议空数组 有两种方式将集合转换为数组 使用 预先确定大小的数组 如 c toArray new String c size 或使
  • 如何更改蜂窝中儿童偏好屏幕的背景颜色

    过去几天我一直在寻找解决方案 但找不到 我需要更改右窗格的背景颜色 我知道如何更改左父首选项的颜色 我在清单文件中创建了一个新主题
  • 无法在 Android Studio 中运行项目

    当我尝试在 Android Studio 中运行我的项目时 我收到以下错误消息 Execution failed for task CricHQ dexDebug gt com android ide common internal Log
  • 拥有可重用对话框的最佳方法是什么?

    在 Android 中创建可重用对话框的最佳方法是什么 阅读通过对话框开发指南 http developer android com guide topics ui dialogs html 我知道我可以使用AlertDialog Buil
  • Android RxJava 2 JUnit 测试 - android.os.Looper 中的 getMainLooper 未模拟 RuntimeException

    我在尝试为正在使用的演示者运行 JUnit 测试时遇到 RuntimeExceptionobserveOn AndroidSchedulers mainThread 由于它们是纯 JUnit 测试而不是 Android 仪器测试 因此它们无
  • 使用磁场计算旋转矩阵

    在获取旋转矩阵值时它包含public static boolean getRotationMatrix float R float I float gravity float geomagnetic 这里我如何计算float gravity

随机推荐

  • 分段错误:11 - 模块交叉引用

    我正在尝试通过模块交叉引用来解决分段错误 不知道如何进行这项工作 部分错误如下 1 While reading from Users damiandudycz Library Developer Xcode DerivedData Hypn
  • 加快“导航抽屉”关闭时的动画速度?

    已实现并按预期工作 因此确实没有值得在此发布的代码 只是想看看是否有人有加快抽屉打开和关闭时间的经验 例如 YouTube 应用程序要快得多 您绝对可以调整动画的持续时间 但这需要您从支持库中复制类 然后进行相应的编辑 视图拖拽助手 持续时
  • Go 中的递归锁定

    Go s sync包有一个Mutex 不幸的是它不是递归的 在 Go 中实现递归锁的最佳方法是什么 很抱歉没有直接回答你的问题 恕我直言 在 Go 中实现递归锁的最佳方法是不实现它们 而是重新设计代码 使其一开始就不需要它们 我认为 对它们
  • urllib3 最大重试错误

    我刚刚开始使用 urllib3 马上就遇到了问题 根据他们的手册 我从一个简单的例子开始 Python 2 7 1 r271 86832 Apr 11 2011 18 13 53 GCC 4 5 2 on linux2 Type help
  • 如何使用 TabItem 名称参数调用 XAML 中的绑定方法?

    我有一个在 XAML 中绑定的对象实例 它有一个方法 将返回给我其他对象的列表 根据我传递给此方法的属性值 它将返回具有该属性值的所有对象
  • 限制对 NodeJS 中 API 的并发请求以及 Async/Await

    我在用Request https www npmjs com package request打包在我的 Nodejs 项目中异步 等待中引入的函数节点 V 8 x要使用第 3 方 API 一切都很好 直到我遇到 API 提供商的限制 who
  • 如何获取列表中所有 NaN 的所有索引?

    我正在尝试制作一个包含所有索引的列表NaNs在列表中a 问题是这个列表ind没有填充任何东西 它有效 如果不是NaN 我放了一个随机字符串 例如c import numpy as np a 1 2 3 4 np nan np nan 2 n
  • 在运行时启用和禁用 gprof?

    我想知道里面有没有APIgprof通过受监控的应用程序在运行时启用和禁用分析 我有兴趣禁用对代码某些部分的分析 并使其能够专注于我感兴趣的部分 我的意思是 有没有办法避免这样做 int main void disable gprof uni
  • 从图像中删除颜色

    我想从下图中删除颜色 由于这种颜色 我无法从图像中清晰地提取文本 我正在使用下面的代码 但我没有得到明确的文本 import numpy as np from PIL import Image im Image open my file t
  • 如何在Linux中用户登录认证后运行脚本

    我有一个脚本 我想在用户登录身份验证后运行 为了实现这一点 我将脚本名称添加到 etc rc5 d S rc local文件 但后来我知道 rc local 文件中添加的任何内容都会在系统启动时执行 而不是在登录身份验证之后执行 谁能告诉我
  • 错误:没有名为“PyQt5.QtMultimedia”的模块

    我正在尝试构建一个集成视频的 GUI 为此我需要导入 PyQt5 QtMultimedia 然而 当尝试导入模块 导入 PyQt5 QtMultimedia 时 我收到错误 ModuleNotFoundError 没有名为 PyQt5 Qt
  • 使用 node.js 运行 shell 脚本(childProcess)

    我想在我的 node js 服务器上运行 shell 脚本 但什么也没发生 childProcess exec play sh media external req params movie function not working 另一个
  • 查找给定查询的 firestore 文档的索引

    我正在使用 Firestore 构建游戏 我想显示高分列表 我目前通过以下查询获得了 10 个最高分 const q query doc db scores title orderBy score desc limit 10 除此之外 我想
  • 如何在Excel中使用单选按钮创建过滤搜索框[关闭]

    Closed 这个问题是无法重现或由拼写错误引起 help closed questions 目前不接受答案 我想创建一个搜索文本框来过滤 Excel 中的数据 我有 3 列数据 汽车品牌 型号和颜色是列 我有单选按钮 选择该按钮后我希望搜
  • 将秘密(密码)存储在单独的文件中

    存储 Python 脚本的应用程序机密 密码 访问令牌 的最简单方法是什么 我以为这会是一个 yml文件就像在 Ruby 中一样 但令人惊讶的是我发现事实并非如此 那么到底是什么呢 最简单的解决方案是什么 我想把它们放在一个separate
  • 在 macOS 上通过 psql 创建 PostgreSQL 数据库备份

    我正在尝试创建一个 PostgreSQLlocal使用 macOS 上的终端进行数据库转储psql 我的下一步是将整个数据库上传 导入到我的 Amazon RDS PostgreSQL 数据库实例 https docs aws amazon
  • 将 Hudson 作业移至另一台服务器

    我已经设置了一个持续集成构建 Hudson 在 Tomcat 上运行 我现在需要将其移动到 Tomcat 的另一个实例 但不想从头开始配置所有内容 是否有一个配置文件定义了我可以复制到新服务器的每个作业 或者可以通过用户界面导入 导出作业
  • 使用变量的“原型”

    大多数时候 主要是教程 我看到 原型 用于方法 我很确定它也可以用于变量 也许对于设置 默认值 最有用 它不经常用于函数有什么原因吗 这是不好的做法 还是存在明显的性能差异 在我的脑海中 你失去了功能hasOwnProperty http
  • Networkx read_gml 错误“networkx.exception.NetworkXError:无法在 (3, 1) 处标记 u'graph'”

    我正在尝试使用 networkx 读取 gml 文件 非常简单 对吧 除非每当我尝试读取文件时 我都会收到错误 networkx exception NetworkXError 无法标记 u graph at 3 1 我对gml或netwo
  • 转换为位图时,CardView 阴影未渲染

    问题 我尝试保存一个视图组 其中有一个CardView作为其子级之一 作为 PNG 文件 为了达成这个 我膨胀视图组并使用所需信息填充视图 通过以下方式将图像加载到图像视图Glide https github com bumptech gl