在Android中如何将TextView的文本转换为位图?

5
我是一名Android开发的初学者,正在尝试开发一个程序,在用户按下“转换为位图!”按钮后,可以将TextView中显示的文本(TextView正在显示我从资产中导入的code 39条形码字体文本)转换为位图。我尝试在谷歌上搜索,但只找到了将字符串转换为位图的答案,没有指导在哪里输入代码,所以我对此感到困惑。 我尝试使用我在谷歌上找到的代码运行程序,但每次按下转换按钮时它都会崩溃。
真的希望你能帮忙!非常感谢!:D
以下是我的代码:-
*编辑了Simon的代码
在Java中:
public class MainActivity extends Activity 
implements OnClickListener {
    //Called when activity is first created

    TextView tv1;
    ImageView iv;
    Button b;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        TextView tv1 = (TextView) findViewById(R.id.txtV);  
        tv1.setDrawingCacheEnabled(true); 

        //To change to code 39 barCode font
        Typeface barcodefont = Typeface.createFromAsset(getAssets(),                 
                "fonts/IDAutomationHC39M_FREE.otf");         
        TextView tv = (TextView) findViewById(R.id.txtV);         
        tv.setTypeface(barcodefont);
    }

    public void onClick(View v) {

        tv1.buildDrawingCache(); 
        iv.setImageBitmap(tv1.getDrawingCache()); 
    } 

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.activity_main, menu);
        return true;
    }
}

Logcat 错误:

10-04 06:33:25.076: E/AndroidRuntime(1423): FATAL EXCEPTION: main
10-04 06:33:25.076: E/AndroidRuntime(1423): java.lang.IllegalStateException: Could not find a method ConvertText(View) in the activity class com.example.txtvbitmapconverter.MainActivity for onClick handler on view class android.widget.Button with id 'btnConvert'
10-04 06:33:25.076: E/AndroidRuntime(1423):     at android.view.View$1.onClick(View.java:3578)
10-04 06:33:25.076: E/AndroidRuntime(1423):     at android.view.View.performClick(View.java:4084)
10-04 06:33:25.076: E/AndroidRuntime(1423):     at android.view.View$PerformClick.run(View.java:16966)
10-04 06:33:25.076: E/AndroidRuntime(1423):     at android.os.Handler.handleCallback(Handler.java:615)
10-04 06:33:25.076: E/AndroidRuntime(1423):     at android.os.Handler.dispatchMessage(Handler.java:92)
10-04 06:33:25.076: E/AndroidRuntime(1423):     at android.os.Looper.loop(Looper.java:137)
10-04 06:33:25.076: E/AndroidRuntime(1423):     at android.app.ActivityThread.main(ActivityThread.java:4745)
10-04 06:33:25.076: E/AndroidRuntime(1423):     at java.lang.reflect.Method.invokeNative(Native Method)
10-04 06:33:25.076: E/AndroidRuntime(1423):     at java.lang.reflect.Method.invoke(Method.java:511)
10-04 06:33:25.076: E/AndroidRuntime(1423):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
10-04 06:33:25.076: E/AndroidRuntime(1423):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
10-04 06:33:25.076: E/AndroidRuntime(1423):     at dalvik.system.NativeStart.main(Native Method)
10-04 06:33:25.076: E/AndroidRuntime(1423): Caused by: java.lang.NoSuchMethodException: ConvertText [class android.view.View]
10-04 06:33:25.076: E/AndroidRuntime(1423):     at java.lang.Class.getConstructorOrMethod(Class.java:460)
10-04 06:33:25.076: E/AndroidRuntime(1423):     at java.lang.Class.getMethod(Class.java:915)
10-04 06:33:25.076: E/AndroidRuntime(1423):     at android.view.View$1.onClick(View.java:3571)
10-04 06:33:25.076: E/AndroidRuntime(1423):     ... 11 more
2个回答

11

试试这个

将以下内容添加到你的onCreate()函数中

tv1.setDrawingCacheEnabled(true);

然后在你的 onClick() 函数中

tv1.buildDrawingCache();
iv.setImageBitmap(tv1.getDrawingCache());

http://developer.android.com/reference/android/view/View.html#buildDrawingCache(boolean)

http://developer.android.com/reference/android/view/View.html#getDrawingCache(boolean)

[EDIT]

现在的问题是,您正在尝试在tv1存在之前启用绘制缓存。

您应该这样做:

TextView tv1 = (TextView) findViewById(R.id.txtV); 
tv1.setDrawingCacheEnabled(true);

我已经尝试过将tv.setDrawingCacheEnabled(true);添加到我的onCreate()方法中,但在调试后程序崩溃了。在放入您提供的代码后,我是否需要从onClick()方法中删除我的if-else? - Amy
你有任何建议在哪里可以阅读它们吗?我几周前尝试从开发者网站阅读,但是却并不明白。非常抱歉我问了重复的问题。 - Amy
谢谢提供链接(: 这是我收到的logcat错误报告: 10-03 09:48:57.249: E/Trace(709): error opening trace file: No such file or directory (2) 10-03 09:48:57.849: D/AndroidRuntime(709): Shutting down VM 10-03 09:48:57.849: W/dalvikvm(709): threadid=1: thread exiting with uncaught exception (group=0x40a13300) 10-03 09:48:57.869: E/AndroidRuntime(709): FATAL EXCEPTION: main - Amy
只需编辑您的问题以包括logcat,无需注释 :) 问题在这里 Caused by: java.lang.NullPointerException 10-03 09:48:57.869: E/AndroidRuntime(709): at com.example.txtvbitmapconverter.MainActivity.onCreate(MainActivity.java:26) 请查看您的onCreate中的第26行。如果您已更改代码,请在问题中替换它。 - Simon
5
getDrawingCache() 目前已被弃用。 - David Miguel
显示剩余7条评论

0

在onCreate()中的那一行:

TextView tv1 = (TextView) findViewById(R.id.txtV);

应该是

tv1 = (TextView) findViewById(R.id.txtV);

这是原帖的解决方案。tv1成员在onCreate中被遮蔽了。 - Brent K.

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