2011-02-18 47 views
1

我想将MyView的扩展TextView的内容保存(导出)为位图。将文本视图(包括屏幕上的内容)转换为位图

我跟着代码:[this] [1]。

当文本的大小很小时,它工作正常。

但是,当有很多文本,并且一些内容不在屏幕上时,我得到的只是屏幕上显示的内容。

然后,我在我的代码添加一个“布局”:

private class MyView extends TextView{ 
    public MyView(Context context) { 
     super(context); 
     // TODO Auto-generated constructor stub 
    } 

    public Bitmap export(){ 
     Layout l = getLayout(); 
     int width = l.getWidth() + getPaddingLeft() + getPaddingRight(); 
     int height = l.getHeight() + getPaddingTop() + getPaddingBottom(); 

     Bitmap viewBitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888); 
     Canvas canvas = new Canvas(viewBitmap); 


     setCursorVisible(false); 
     layout(0, 0, width, height); 
     draw(canvas); 

     setCursorVisible(true); 
     return viewBitmap; 
    } 
} 

现在,奇怪的事情发生了:

我第一次调用“出口”(我用的选项键来做到这一点) ,我只在屏幕上看到内容。

当我再次调用“导出”时,我得到了完整的内容,包括那些不在屏幕上的内容。

为什么?

如何“导出”一个视图,包括内容无法显示在屏幕上?

谢谢!

[1]:http://www.techjini.com/blog/2010/02/10/quicktip-how-to-convert-a-view-to-an-image-android/

回答

1

我发现了一个简单的方法: 把TextView的一个滚动型。 现在myTextView.draw(canvas)将绘制所有的文本。

0

我想你应该减去宽度填充在高度而不是添加它的。添加它会给你一个比屏幕更大的区域。

+0

感谢您的提醒。但是这并没有回答我的问题。 – 2011-02-19 09:27:32

0

我解决了这个问题,这种方式(奇怪,但工程):

public Bitmap export(){ 
    //... 
    LayoutParams lp = getLayoutParams(); 
    int old_width = lp.width; 
    int old_height = lp.height; 
    int old_scroll_x = getScrollX(); 
    int old_scroll_y = getScrollY(); 
    lp.width = width; 
    lp.height = height; 
    layout(0, 0, width, height); 
    scrollTo(0, 0); 
    draw(canvas); 
    lp.width = old_width; 
    lp.height = old_height; 
    setLayoutParams(lp); 
    scrollTo(old_scroll_x, old_scroll_y); 
    //... 

}

相关问题