将完全可滚动的textview转换为位图

时间:2014-07-31 13:50:51

标签: android bitmap scrollview

我正在尝试将textview转换为Bitmap 这是我的Xml代码:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@string/Rlayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".ProductListAcivity" >
<TextView
       android:id="@+id/textView1"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:layout_alignParentTop="true"
       android:layout_above="@+id/textView2"
       android:layout_toLeftOf="@+id/bntLinLay"
       android:layout_toRightOf="@+id/scrollView1"
       android:gravity="center_horizontal"
       android:scrollbars="vertical"
       android:text="****MIMOSA**** \n Articles :\n"
       android:typeface="monospace" />
</RelativeLayout>

然后:

TextView tv = (TextView) findViewById(R.id.textView1);
tv.setMovementMethod(new ScrollingMovementMethod());
tv.setDrawingCacheEnabled(true);
tv.buildDrawingCache();
Bitmap testB = Bitmap.createBitmap(tv.getDrawingCache());

但是位图大小是TextView的初始大小,只占用了Textview的显示部分,所以我尝试使用可扩展的linearLayout这个代码,它可以工作!  我无法找到解决方案。 请提出任何建议!

1 个答案:

答案 0 :(得分:0)

我找到了适合你的解决方案。首先,我将从TextView获取文本,计算线条,然后在位图上绘制它。它可能会起作用,但我尝试了其他的东西并且效果很好。

要启用可滚动的TextView,人们通常会执行您所做的操作,设置scrollbars:"vertical"并设置ScrollingMovementMethod()

作为替代方案,您只需将文本视图包装在ScrollView中即可。

<ScrollView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/scrollView"
    android:layout_alignParentTop="true"
    android:layout_alignParentLeft="true"
    android:layout_alignParentStart="true"
    android:layout_alignParentBottom="true"
    android:layout_alignParentRight="true"
    android:layout_alignParentEnd="true" >

    <TextView
        android:id="@+id/textView"
        android:text="@string/hello_world"
        android:gravity="center_horizontal"
        android:textSize="20sp"
        android:typeface="monospace"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
</ScrollView>

然后此代码将起作用

tv.setDrawingCacheEnabled(true);
Bitmap testB = Bitmap.createBitmap(tv.getDrawingCache());

删除行:

tv.setMovementMethod(new ScrollingMovementMethod());
tv.buildDrawingCache();

现在,让我解释一下为什么会这样。当您请求绘图缓存时,您将根据视图边界以及在这些边界内绘制的所有内容获取缓存。因为你的TextView匹配RelativeLayout和&#34; draw&#34;不可见的文本超出范围,您无法获取位图中的所有文本。

另一方面,当您将其包装在ScrollView中时,TextView大小与文本匹配,因此缓存范围覆盖整个文本并且对您有用。