Android 创建视图的位图

Android 创建视图的位图,android,view,bitmap,Android,View,Bitmap,我尝试通过膨胀布局以编程方式创建视图 View marker = ((LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE)).inflate(R.layout.overlay_view, null); 现在我想将此视图转换为位图: public static Bitmap createDrawableFromView(Context context, View view){ Disp

我尝试通过膨胀布局以编程方式创建视图

View marker = ((LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE)).inflate(R.layout.overlay_view, null);
现在我想将此视图转换为位图:

public static Bitmap createDrawableFromView(Context context, View view){
        DisplayMetrics displayMetrics = new DisplayMetrics();
        ((Activity)context).getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);

        view.measure(displayMetrics.widthPixels, displayMetrics.heightPixels);
        view.layout(0, 0, displayMetrics.widthPixels, displayMetrics.heightPixels);

        Bitmap cache = Bitmap.createBitmap(view.getMeasuredWidth(), view.getMeasuredHeight(), Bitmap.Config.ARGB_8888);

        Canvas canvas = new Canvas(cache);
        view.draw(canvas);

        return cache;
    }
我还尝试了测量(1,1)和布局(0,0,0,0),没有任何更改。 位图看起来像填充的布局。 现在的问题是:如果我在视图中放入一些东西,使视图在宽度或高度上大于Displaysize(例如:具有长文本的TextView),位图也会更大。 视图XML宽度和高度是包装内容,但它不起作用。 我从来没有把这个视图放在某个地方来显示它(因为我只需要位图)

问题:如何将视图包装为最大宽度=显示宽度

我试过view.setLayoutParams(新的LayoutParam(100100))但它也大于100?!我真的不明白当我膨胀布局并设置视图内容时发生了什么

view.getMeasuredWidth和Height始终比我的显示器大?!(如果我在里面放了更大的东西)

以下是布局示例:

<RelativeLayout android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="@drawable/somedrawable"
        android:padding="10dp"
        android:clickable="true">
        <TextView android:id="@+id/name"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Name"/>
        <TextView android:id="@+id/description"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_below="@id/name"
            android:text="Description"
            android:textSize="20dp"
            android:textColor="#ffffff"/>
    </RelativeLayout>

我找到了一个解决方案:

第一步:向视图中添加新的LayoutParams。这很重要,因为没有你会得到一个空指针

view.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
第二:

view.measure(MeasureSpec.makeMeasureSpec(displayMetrics.widthPixels), MeasureSpec.AT_MOST),
             MeasureSpec.makeMeasureSpec(displayMetrics.heightPixels, MeasureSpec.AT_MOST));
对于
view.measure()
我使用了
MeasureSpec.makeMeasureSpec(displayMetrics.heightPixels,MeasureSpec.AT_MOST))。第一个参数是显示宽度或高度,第二个参数最多是模式,这是“包装”视图所需的


很好!(对我来说:p)

哼?答案在哪里?有答案,但现在不见了?!检查我给的链接。啊,我明白了。。。可以我还尝试了所有不同版本的getDrawableCache,但都不起作用。如果我使用这个缓存,位图是空的!如果我使用view.layout(0,0100100),getDrawingCache将返回宽度为100、高度为100的位图,但我看不到任何内容,因此它是空的。它可能为空,因为您在屏幕布局加载(onCreate)之前设置了缓存,所以请尝试在屏幕加载之后设置缓存。