在onCreate中从TextLayout获取Bitmap

2024-01-23

我能够转换Layout with a TextView into a Bitmap,只要事件发生after onCreate()。但当我尝试时during在创建时,它不起作用。

有办法让它发挥作用吗?我尝试过使用inflate()以各种方式,没有喜悦。

有各种已回答的问题,包括this one https://stackoverflow.com/questions/4715044/android-how-to-convert-whole-imageview-to-bitmap这解决了我在代码中成功使用的技术。但成功并不包括采用来自onCreate().

public class MainActivity extends AppCompatActivity {
    private static final String TAG = MainActivity.class.getSimpleName();

    private RelativeLayout mTextLayout;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // This is what I would like to work
        replaceTheRobot(); // Fails.  Bitmap is null.
    }

    public void onClickGetBitmap(View view) {
        replaceTheRobot(); // Works.  Bitmap replaces the robot.
    }

    private void replaceTheRobot() {
        mTextLayout = (RelativeLayout) findViewById(sampleRelativeLayout);
        mTextLayout.setDrawingCacheEnabled(true);
        Bitmap bitmap = mTextLayout.getDrawingCache();
        if (bitmap == null) {
            Toast.makeText(getApplicationContext(), "The bitmap was null", Toast.LENGTH_LONG).show();
            Log.v(TAG, "The bitmap was null");
        }
        else {
            Toast.makeText(getApplicationContext(), "The bitmap size: " + bitmap.getWidth() +", " + bitmap.getHeight(), Toast.LENGTH_LONG).show();
            ImageView imageViewRobot = (ImageView) findViewById(R.id.imageViewRobot);
            imageViewRobot.setImageDrawable(new BitmapDrawable(this.getResources(), bitmap));
        }
    }
}

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_main_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity">

    <RelativeLayout
        android:id="@+id/sampleRelativeLayout"
        android:layout_width="50dp"
        android:layout_height="50dp">
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Hello World!"
            android:id="@+id/helloTextView" />
    </RelativeLayout>

    <ImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:srcCompat="@mipmap/ic_launcher"
        android:id="@+id/imageViewRobot"
        android:layout_centerVertical="true"
        android:layout_centerHorizontal="true" />

    <Button
        android:text="Get Bitmap"
        android:onClick="onClickGetBitmap"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:id="@+id/button" />
</RelativeLayout>

View尚未渲染。您可以使用view.getViewTreeObserver().addOnGlobalLayoutListener当您的布局准备就绪时收到通知。

所以,像这样:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    final ViewTreeObserver viewTreeObserver = findViewById(sampleRelativeLayout).getViewTreeObserver();
    viewTreeObserver.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
        @Override
        public void onGlobalLayout() {
        viewTreeObserver.removeOnGlobalLayoutListener(this);
        replaceTheRobot();
        }
    });
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在onCreate中从TextLayout获取Bitmap 的相关文章

  • Android - 如何一次只允许播放一个 MediaPlayer 实例?

    我正在尝试创建一个简单的 Sound board Android 应用程序 使用 ListView 项目作为按钮 顺便说一句 我是一个新手程序员 我的想法是 我按下一个按钮 就会播放一个特定的声音文件 如果我在播放声音时按下任何按钮 它应该
  • 在自定义对象中创建时粘性服务不会重新启动

    我有一个具有绑定服务的单例对象 我希望它重新启动 当我从启动器启动应用程序时 单例对象将初始化并绑定到这个现有的服务实例 以下是在单例中创建和绑定服务的代码 public class MyState private static MySta
  • 菜单未显示在应用程序中

    由于某种原因 我的操作菜单在我的 Android Studio 应用程序中消失了 我正在按照教程学习如何创建 Android 应用程序 但最终遇到了这个问题 我正在使用 atm 的教程 http www raywenderlich com
  • 获取 AlarmManager 中活动的 PendingIntents 列表

    我有办法获取活动列表PendingIntent在设备中 我开始工作AlarmManager我想看看我的PendingIntents 已正确创建和删除 也很高兴看到其他什么PendingIntent在那里 只是为了看看某些应用程序是否正在做一
  • 在我的Android中,当其他应用程序想要录制音频时如何停止录音?

    在我的应用程序中 服务通过 AudioRecord 持续录制音频 当我的应用程序运行时 其他与音频记录相关的应用程序 例如 Google 搜索 无法工作 如何知道何时有其他应用想要录制音频 以便我可以停止录制以释放资源 答案是MediaRe
  • 更新到材质 1.2.0 后,材质按钮上缺少圆角半径属性

    这是我的材质按钮代码
  • 请求位置更新参数

    这就是 requestLocationUpdates 的样子 我使用它的方式 requestLocationUpdates String provider long minTime float minDistance LocationLis
  • Android 版 Robotium - solo.searchText () 不起作用

    我在使用 Robotium 时遇到 searchText 函数问题 我正在寻找这个字符串
  • 材质设计图标颜色

    应该是哪种颜色 暗 材质图标 在官方文档上 https www google com design spec style icons html icons system icons https www google com design s
  • 调节麦克风录音音量

    我们正在尝试调整录音时的音量级别 麦克风似乎非常敏感 会接收到很多静电 我们查看了 setVolumeControlStream 但找不到传入其中来控制麦克风的流 将您的音频源设置为 MIC using MediaRecorder Audi
  • 如何创建像谷歌位置历史记录一样的Android时间轴视图?

    我想设计像谷歌位置历史这样的用户界面 我必须为我正在使用的应用程序复制此 UIRecyclerView 每行都是水平的LinearLayout其中包含右侧的图标 线条和视图 该线是一个FrameLayout具有圆形背景和半透明圆圈Views
  • 应用程序关闭时的倒计时问题

    我制作了一个 CountDownTimer 代码 我希望 CountDownTimer 在完成时重新启动 即使应用程序已关闭 但它仅在应用程序正在运行或重新启动应用程序时重新启动 因此 如果我在倒计时为 00 10 分钟 秒 时关闭应用程序
  • Android - 将 ImageView 保存到具有全分辨率图像的文件

    我将图像放入 ImageView 中 并实现了多点触控来调整 ImageView 中的图像大小和移动图像 现在我需要将调整大小的图像保存到图像文件中 我已经尝试过 getDrawingCache 但该图像具有 ImageView 的大小 我
  • 保护 APK 中的字符串

    我正在使用 Xamarin 的 Mono for Android 开发一个 Android 应用程序 我目前正在努力使用 Google Play API 添加应用内购买功能 为此 我需要从我的应用程序内向 Google 发送公共许可证密钥
  • Android 如何聚焦当前位置

    您好 我有一个 Android 应用程序 可以在谷歌地图上找到您的位置 但是当我启动该应用程序时 它从非洲开始 而不是在我当前的城市 国家 位置等 我已经在developer android com上检查了信息与位置问题有关 但问题仍然存在
  • 将签名位图转换为签名字符串(很奇怪的一个)

    基本上我需要将位图图像转换为字符串 但这不是常见的 困境在于该字符串由两部分组成 1 积分 2 线路 我需要将图像转换为由 分隔的两个部分 我得到的一个例子是 221A 221A270A270A25032503200720071716171
  • 在webview android中加载本地html文件

    我正在尝试在 android 的 webview 中加载 html 文件的内容 但是 它给了我 网页不可用错误 如果我尝试使用谷歌或雅虎等网站 它们就会起作用 html文件位于src gt main gt assests gt index
  • 如何删除因 Google Fitness API 7.5.0 添加的权限

    将我的 play services fitness api 从 7 0 0 更新到 7 5 0 后 我注意到当我将新版本上传到 PlayStore 时 它 告诉我正在添加一个新权限和 2 个新功能 我没有这样做 有没有搞错 在做了一些研究来
  • 无法将 admob 与 firebase iOS/Android 项目链接

    我有两个帐户 A 和 B A 是在 Firebase 上托管 iOS Android unity 手机游戏的主帐户 B 用于将 admob 集成到 iOS Android 手机游戏中 我在尝试将 admob 分析链接到 Firebase 项
  • 在 Google 地图上绘制线条/路径

    我很长一段时间都在忙于寻找如何在 HelloMapView 中的地图上的两个 GPS 点之间画一条线 但没有运气 谁能告诉我该怎么做 假设我使用扩展 MapView 的 HelloMapView 我需要使用叠加层吗 如果是这样 我是否必须重

随机推荐

  • 使用 RxJava 处理长时间运行的任务

    我正在尝试迁移AsyncTask向服务器发送消息 使用 RxJava 粗略地说 该任务执行以下操作 1 创建一条将要发送的消息 保存到数据库 2 向用户显示消息 状态 正在发送 3 向服务器发送消息 代码片段如下 4 将消息标记为已发送或失
  • 如何向表视图添加“加载更多”选项

    我的应用程序有一个由 Sqlite DB 填充的表 其中包含大量数据 所以它会导致表视图中的延迟加载 这是代码 void searchData i 0 newSearchBar setShowsCancelButton YES animat
  • IMDB 是否提供 API? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我最近发现了一个电影组织者应用程序 它从互联网电影数据库 http www imdb com Does
  • 无法调试 Go 代码:无法启动进程:在偏移量 0x0 处解码 dwarf 部分信息:太短

    我们正在尝试调试 Go 代码并收到此错误 could not launch process decoding dwarf section info at offset 0x0 too short 我们的设置 WITSC02X6385JGH
  • BluetoothGatt:协商新的 MTU 成功,但无法使用新的大小(相差 3 个字节)

    我正在开发一个使用 BLE 在设备之间交换数据的应用程序 为了获得更好的性能 在连接两个设备后 我正在协商增加 MTU 以便通过 BLE 交换更大的数据包 连接蓝牙设备并读取所有服务和特征后 我请求使用以下方法增加 MTU private
  • 我想为图像创建一个单独的域

    我想设置一个名为 img mydomain com 的域 这将是一个虚拟域 就像我的实际域一样 除了一个区别 它只提供以 jpg jpeg gif png 等结尾的文件 这样我就可以参考 img mydomain com some imag
  • 如何在wxFrame上设置图标?

    如何向 wxFrame 添加图标 ico 文件 我正在寻找docs http www wxpython org docs api wx Frame class html但找不到任何提及icon Thanks 凤凰wxpython frame
  • 如何访问Microsoft Speech SDK录制的音频流

    我正在使用 Microsoft 的 JavaScript 语音 SDK 转录麦克风流 录音和转录都是使用语音 SDK 完成的 我无法找到在录音完成后如何访问和保存录制的音频文件的方法 创建录音机并录音的代码 recognizer new S
  • jQuery 自定义事件到底是如何工作的

    我找不到任何关于 jquery 中的自定义事件实际实现方式的好资源 比如他们如何模拟事件冒泡等 这边走 bubbling is internal trigger function event data elem bubbling Event
  • 在 Ace 编辑器中检索字符串的行号

    我正在尝试检索 ace 编辑器中显示的文本中给定字符串的行号 示例 搜索 foo 返回 4 5 条件 ace编辑器内容中第4行和第5行包含 foo 字符串 遍历所有行并检查indexOf function findFooLineNumber
  • 使用推送通知时如何处理多个设备?

    我正在开发一个应用程序 我想在其中使用推送通知服务 我有一个服务器 现在我想知道 如何处理多个设备 每部 iPhone 都有唯一的设备 ID 名称吗 假设我想删除特定设备令牌的请求 那么如何处理多个用户呢 有没有办法通过应用程序为每个设备生
  • Angular 2 提前编译器:我必须将所有类属性公开吗?

    Angular 2 rc 6 typescript 2 node 4 5 0 npm 2 15 9 on Windows 7 我正在尝试从即时编译转向提前编译 并且我依赖这些资源 Angular 2 提前编译如何 https stackov
  • 从 OWIN 中的 OAuth Bearer Token 获取 IPrincipal

    我已使用 OWIN 成功将 OAuth 添加到我的 WebAPI 2 项目中 我收到令牌并可以在 HTTP 标头中使用它们来访问资源 现在 我想在其他通道上也使用这些令牌进行身份验证 这些通道不是 OWIN 模板所针对的标准 HTTP 请求
  • 在 Android 中使用 Jaunt 时类名冲突

    我正在尝试使用短动API http jaunt api com 根据建议使用 androidthis https stackoverflow com a 20002760 1291122所以回答 但当我运行项目时出现此错误 Could no
  • BinData() 中的十六进制而不是 base64 - MongoDB

    有没有办法将二进制值的十六进制而不是 base64 发送到 mongo 中的 BinData HexData 3 00112233445566778899aabbccddeeff or UUID 00112233445566778899aa
  • AccessibilityNodeInfo nodeInfo = event.getSource() 始终返回 null

    我正在尝试使用 AccessibilityNodeInfo 但当我使用 event getSource 时它总是返回 null 我尝试读取浏览器的编辑框 这是我的代码 public class MainActivity extends Ac
  • 将大数转换为不带科学记数法的字符串[重复]

    这个问题在这里已经有答案了 e g Number MAX VALUE toString is 1 7976931348623157e 308 我希望没有e 308 如何实现这一目标 你可以这样做 var n Number MAX VALUE
  • 处理 proguard 与 spring 时遇到困难

    我有一个使用 spring 注释扩展的 Web 应用程序 并且我的 proguard 配置如下所示 printmapping out map dontoptimize keepdirectories renamesourcefileattr
  • 使用 iOS 版 Google 地图 SDK 后应用程序大小增加

    我尝试使用适用于 iOS 的 Google Maps SDK 它似乎给我们的应用程序增加了相当大的大小 96MB 而目前应用程序的大小仅为 26MB 使用 Apple 地图 我将不胜感激任何有关如何解决的反馈 经验 没有办法解决这个问题 这
  • 在onCreate中从TextLayout获取Bitmap

    我能够转换Layout with a TextView into a Bitmap 只要事件发生after onCreate 但当我尝试时during在创建时 它不起作用 有办法让它发挥作用吗 我尝试过使用inflate 以各种方式 没有喜