android将XML视图转换为位图而不显示它 [英] android converting XML View to Bitmap without showing it

查看:68
本文介绍了android将XML视图转换为位图而不显示它的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试为我的地图集群设置视图. 我正在从XML扩展视图,并根据群集大小设置文本",我想显示该视图. 在以下代码中,我得到了一个空位图作为回报:

i'm trying to set a view to my map cluster. i'm inflating a view from an XML and setting the Text according to cluster size and i want to show that view. in the following code i get a null bitmap in return:

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;
}

在以下代码中,我在第四行(布局参数)上获得了空指针:

in the following code i get null pointer on the fourth line (the layout params):

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;
}

,将其更改为以下代码时,我没有出现错误,但未绘制任何内容:

and when changing it to the following code i get not error but nothing is drawed:

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.首先,您需要测量展开视图的宽度/高度,然后分配给它.请按照以下步骤进行操作:

Your cluster.getLayoutParams() is probably null. First, you need to measure the width/height of your inflated view and then assign to it. Do it as below:

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视图转换为位图而不显示它的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆