在android中将视图转换为位图图像

时间:2011-06-09 16:32:59

标签: android image view bitmap

我对Android很新,并希望在将视图转换为Bitmap图片方面提供一些帮助。 我有Activity我在其中创建了RelativeLayout,并在顶部添加了2 TextViews,在底部添加了一个Activity。如果RelativeLayout本身显示,则Bitmap显示正常。 我正在尝试将此视图转换为ImageView并显示为LinearLayout(添加到RelativeLayout),而不是显示View。但是显示器似乎没有保留public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); LayoutParams lp = new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT); LinearLayout finalImage = new LinearLayout(this); finalImage.setLayoutParams(lp); RelativeLayout main = new RelativeLayout(this); main.setLayoutParams(lp); TextView tv = new TextView(this); tv.setTextColor(Color.RED); tv.setText("Top Text Content"); tv.setGravity(Gravity.CENTER); tv.setId(1); lp = new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT); lp.addRule(RelativeLayout.ALIGN_PARENT_TOP); main.addView(tv,lp); TextView headingView = new TextView(this); headingView.setTextColor(Color.RED); headingView.setPadding(15, 10, 10, 10); headingView.setTextSize(20); headingView.setText("Bottom Text Content"); headingView.setGravity(Gravity.CENTER); headingView.setId(2); lp = new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT); lp.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM); main.addView(headingView,lp); main.setDrawingCacheEnabled(true); // this is the important code :) // Without it the view will have a dimension of 0,0 and the bitmap will be null main.measure(MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED), MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED)); main.layout(0, 0, main.getMeasuredWidth(), main.getMeasuredHeight()); main.buildDrawingCache(true); Bitmap returnedBitmap = Bitmap.createBitmap(main.getDrawingCache()); main.setDrawingCacheEnabled(false); // clear drawing cache ImageView iv = new ImageView(this); iv.setImageBitmap(returnedBitmap); finalImage.addView(iv); //setContentView(main); setContentView(finalImage); } 的布局,而是将元素组合在一起并显示在图像中。

有人可以告诉我这里出了什么问题吗? 这是我写的简单代码

{{1}}

1 个答案:

答案 0 :(得分:0)

这个代码段对我来说很好用:

/**
 * This method provided by Romain Guy, so it should do the job better, especially it includes case for listViews
 */
public static Bitmap getBitmapFromView(View view, int width, int height) {

    //Pre-measure the view so that height and width don't remain null.
    view.measure(View.MeasureSpec.makeMeasureSpec(width, View.MeasureSpec.EXACTLY), View.MeasureSpec.makeMeasureSpec(height, View.MeasureSpec.EXACTLY));
    //Assign a size and position to the view and all of its descendants
    view.layout(0, 0, view.getMeasuredWidth(), view.getMeasuredHeight());

    // Create bitmap
    Bitmap bitmap = Bitmap.createBitmap(view.getWidth(), view.getHeight(), Bitmap.Config.RGB_565);

    //Create a canvas with the specified bitmap to draw into
    Canvas canvas = new Canvas(bitmap);

    // if it's scrollView we get gull size
    canvas.translate(-view.getScrollX(), -view.getScrollY());
    //Render this view (and all of its children) to the given Canvas
    view.draw(canvas);
    return bitmap;
}