android 将 XML View 转换为位图而不显示它

标签 android xml bitmap

我正在尝试为我的 map 集群设置一个 View 。 我正在膨胀 XML 的 View 并根据群集大小设置文本,我想显示该 View 。 在下面的代码中,我得到一个空位图作为返回:

private Bitmap createClusterBitmap(int clusterSize) {
    View cluster = LayoutInflater.from(context).inflate(R.layout.map_cluster, null);        
    cluster.setText(String.valueOf(clusterSize));
    cluster.setDrawingCacheEnabled(true);
    cluster.buildDrawingCache(true);
    Bitmap bm = cluster.getDrawingCache();
    return bm;
}

在下面的代码中,我在第四行(布局参数)得到空指针:

private Bitmap createClusterBitmap(int clusterSize) {
    View cluster = LayoutInflater.from(context).inflate(R.layout.map_cluster, null);
    TextView clusterSizeText = (TextView) cluster.findViewById(R.map.cluster);
    clusterSizeText.setText(String.valueOf(clusterSize));
    Bitmap clusterBitmap = Bitmap.createBitmap( cluster.getLayoutParams().width, cluster.getLayoutParams().height, Bitmap.Config.ARGB_8888);                
    Canvas clusterCanvas = new Canvas(clusterBitmap);
    cluster.layout(cluster.getLeft(), cluster.getTop(), cluster.getRight(), cluster.getBottom());
    cluster.draw(clusterCanvas);
    return clusterBitmap;
}

当将其更改为以下代码时,我没有收到错误消息,但未绘制任何内容:

private Bitmap createClusterBitmap(int clusterSize) {
    View cluster = LayoutInflater.from(context).inflate(R.layout.map_cluster, null);
    TextView clusterSizeText = (TextView) cluster.findViewById(R.map.cluster);
    clusterSizeText.setText(String.valueOf(clusterSize));
    Bitmap clusterBitmap = Bitmap.createBitmap( 50,50 , Bitmap.Config.ARGB_8888);                
    Canvas clusterCanvas = new Canvas(clusterBitmap);
    cluster.layout(50, 50, 50, 50;
    cluster.draw(clusterCanvas);
    return clusterBitmap;
}

这是我的 XML:

<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+map/cluster"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:background="@drawable/map_pointer_cluster"
    android:gravity="center"
    android:orientation="vertical"
    android:textColor="@android:color/black"
    android:textSize="35dp"
    android:textStyle="bold" />

最佳答案

您的 cluster.getLayoutParams() 可能是 null。首先,您需要测量膨胀 View 的宽度/高度,然后分配给它。如下所示:

private Bitmap createClusterBitmap(int clusterSize) {
    View cluster = LayoutInflater.from(context).inflate(R.layout.map_cluster,
            null);

    TextView clusterSizeText = (TextView) cluster.findViewById(R.id.map_cluster_text);
    clusterSizeText.setText(String.valueOf(clusterSize));

    cluster.measure(MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED),
            MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED));
    cluster.layout(0, 0, cluster.getMeasuredWidth(),cluster.getMeasuredHeight());

    final Bitmap clusterBitmap = Bitmap.createBitmap(cluster.getMeasuredWidth(),
            cluster.getMeasuredHeight(), Bitmap.Config.ARGB_8888);

    Canvas canvas = new Canvas(clusterBitmap);
    cluster.draw(canvas);

    return clusterBitmap;
}

关于android 将 XML View 转换为位图而不显示它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12402392/

相关文章:

python - 使用 multiprocessing.Pool 泄漏内存,即使在 close() 之后

c# - 在 UWP App 中将蒙版应用于位图图像

Android FileProvider删除文件

android - 如何在 android 中打开 .png 或 .doc 文件

php - 如何使用 PHP 访问 XML 中的多个相似标签

java - 如何在android中正确设置位图的像素?

python - wxPython - GC.DrawText 删除背景位图

c# - Unity android Native Camera 作为 WebcamTexture

java - 如何创建唯一 key 并使用它在 Firebase 中发送数据?

java - jackson 空xml数组反序列化