如何在安卓系统中将视图转换为位图?

5
我正在使用以下代码将android视图转换为位图:

我在Android中使用以下代码行将视图转换为位图。

view.setDrawingCacheEnabled(true);
Bitmap b= view.getDrawingCache(); 

在将视图转换为位图时,我发现视图中的值显示为空(null)。

1
你不能在onCreate中这样做,因为UI直到之后才会被绘制。你想要做什么? - Simon
正如Simon所说,代码是正确的,但你必须将它放在正确的位置。 - faylon
我正在onCreate()之外进行这项工作,在视图中,我有一个可缩放的位图值,因此我试图将视图转换为位图,最后将其添加到ImageView中。 - sravanthi
尝试搜索https://dev59.com/H2w05IYBdhLWcg3wfyA0。 - Andy McSherry
我的视图值 = packagename.classname@4053675,就是这样出现的,所以我尝试转换位图,但它显示为空。请帮帮我。 - sravanthi
在屏幕上绘制所有视图后调用代码。 - faylon
4个回答

6

活动类别 在这个类别中,我将布局(View) 转换为图片。

import android.os.Bundle;
import android.app.Activity;
import android.graphics.Bitmap;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ImageView;
import android.widget.LinearLayout;

public class ImageActivity extends Activity {

    LinearLayout layout=null;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_convert);
        layout=(LinearLayout)findViewById(R.id.layout);
        ((ImageView)findViewById(R.id.ImageView01)).setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                Bitmap map=ConvertToBitmap(layout);
                Log.v("BitmapObject", map.toString());
            }
        });       
    }

    protected Bitmap ConvertToBitmap(LinearLayout layout) {
        Bitmap map;
        layout.setDrawingCacheEnabled(true);
        layout.buildDrawingCache();
        return map=layout.getDrawingCache();
    }
}

3
使用以下代码:只需替换您的视图值。
YourView view = (YourView )findViewById(R.id.yourViewId);

view.setDrawingCacheEnabled(true);

view.buildDrawingCache();

Bitmap bm = view.getDrawingCache();

Reference


我的视图值 = packagename.classname@4053675,就是这样出现的,所以我尝试转换位图,但它显示为空。请帮帮我。 - sravanthi
@sravanthi,你需要重写onWindowsFocusChanged()方法才能获得非空值 :) - Si8

1

试一下这个:

LinearLayout view1 = (LinearLayout) findViewById(R.id.linear1);
ImageView my_image = (ImageView) findViewById(R.id.my_imageView);

Bitmap b = Bitmap.createBitmap(view1.getWidth(), view1.getHeight(), Bitmap.Config.ARGB_8888);
Canvas c = new Canvas(b);
view1.draw(c);

my_image.setImageBitmap(b); 

希望能对您有所帮助。
谢谢。

我的视图值 = packagename.classname@4053675,就是这样出现的,所以我尝试转换位图,但它显示为空。请帮帮我。 - sravanthi
在使用前,您需要初始化视图,并且这将在onCreate方法之外起作用。尝试在某个按钮点击事件上调用这些内容,以便在使用前初始化您的视图。 - Pratik Sharma
我有一个布局,我正在尝试获取其背景。布局的宽度X高度与位图的宽度和高度不同 :/ - Si8

0

这可能可行

public static Bitmap getBitmapFromView(View view) {
   Bitmap returnedBitmap = Bitmap.createBitmap(view.getWidth(), view.getHeight(),Bitmap.Config.ARGB_8888);
   Canvas canvas = new Canvas(returnedBitmap);
   view.layout(0, 0, view.getLayoutParams().width, view.getLayoutParams().height);
   view.draw(canvas);
   return returnedBitmap;
}

我的视图值 = packagename.classname@4053675,就是这样出现的,所以我尝试转换位图,但它显示为空。请帮帮我。 - sravanthi
你如何从Activity中调用它? - Si8
如果您将其添加到活动中,则可以直接从该活动调用它。您还可以从该方法中删除 static。 - Fergers
只需要更改这一行代码:view.layout(0, 0, view.getWidth(), view.getHeight()); - IQ.feature

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接