`
debuglog
  • 浏览: 196319 次
社区版块
存档分类
最新评论

仅layout使用继承TextView,报java.lang.NullPointerException

阅读更多
Android 2.3.3         
Eclipse Version: 3.7.0         
LogCat   

 AutoScrollTextView继承TextView,用于文字特殊效果显示,代码如下:

public class AutoScrollTextView extends TextView implements OnClickListener {
	……
	public void onDraw(Canvas canvas) {
		……
		canvas.drawText(text, temp_view_plus_text_length - step, y, paint);
		……
	}
	……
}

Activity中使用:
 

nokia = (AutoScrollTextView) findViewById(R.id.nokia);

Activity对应的layout :

		<com.jinhua.util.AutoScrollTextView
			android:id="@+id/nokia" android:text="nokia" android:layout_height="fill_parent"
			android:layout_width="40px" android:textColor="#999"
			android:layout_gravity="right" android:background="#333">
		</com.jinhua.util.AutoScrollTextView>

当Activity中取消使用AutoScrollTextView,而对应layout 未取消对应配置时,
LogCat 报错信息:

02-06 23:15:33.728: DEBUG/AndroidRuntime(1034): Shutting down VM
02-06 23:15:33.728: WARN/dalvikvm(1034): threadid=1: thread exiting with uncaught exception (group=0x40015560)
02-06 23:15:33.747: ERROR/AndroidRuntime(1034): FATAL EXCEPTION: main
02-06 23:15:33.747: ERROR/AndroidRuntime(1034): java.lang.NullPointerException
02-06 23:15:33.747: ERROR/AndroidRuntime(1034): at android.graphics.Canvas.drawText(Native Method)
02-06 23:15:33.747: ERROR/AndroidRuntime(1034): at com.nokia.util.AutoScrollTextView.onDraw(AutoScrollTextView.java:181)
02-06 23:15:33.747: ERROR/AndroidRuntime(1034): at android.view.View.draw(View.java:6880)
02-06 23:15:33.747: ERROR/AndroidRuntime(1034): at android.view.ViewGroup.drawChild(ViewGroup.java:1646)
02-06 23:15:33.747: ERROR/AndroidRuntime(1034): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
02-06 23:15:33.747: ERROR/AndroidRuntime(1034): at android.view.ViewGroup.drawChild(ViewGroup.java:1644)
02-06 23:15:33.747: ERROR/AndroidRuntime(1034): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
02-06 23:15:33.747: ERROR/AndroidRuntime(1034): at android.view.ViewGroup.drawChild(ViewGroup.java:1644)
02-06 23:15:33.747: ERROR/AndroidRuntime(1034): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
02-06 23:15:33.747: ERROR/AndroidRuntime(1034): at android.view.ViewGroup.drawChild(ViewGroup.java:1644)
02-06 23:15:33.747: ERROR/AndroidRuntime(1034): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
02-06 23:15:33.747: ERROR/AndroidRuntime(1034): at android.view.View.draw(View.java:6883)
02-06 23:15:33.747: ERROR/AndroidRuntime(1034): at android.widget.FrameLayout.draw(FrameLayout.java:357)
02-06 23:15:33.747: ERROR/AndroidRuntime(1034): at com.android.internal.policy.impl.PhoneWindow$DecorView.draw(PhoneWindow.java:1862)
02-06 23:15:33.747: ERROR/AndroidRuntime(1034): at android.view.ViewRoot.draw(ViewRoot.java:1522)
02-06 23:15:33.747: ERROR/AndroidRuntime(1034): at android.view.ViewRoot.performTraversals(ViewRoot.java:1258)
02-06 23:15:33.747: ERROR/AndroidRuntime(1034): at android.view.ViewRoot.handleMessage(ViewRoot.java:1859)
02-06 23:15:33.747: ERROR/AndroidRuntime(1034): at android.os.Handler.dispatchMessage(Handler.java:99)
02-06 23:15:33.747: ERROR/AndroidRuntime(1034): at android.os.Looper.loop(Looper.java:123)
02-06 23:15:33.747: ERROR/AndroidRuntime(1034): at android.app.ActivityThread.main(ActivityThread.java:3683)
02-06 23:15:33.747: ERROR/AndroidRuntime(1034): at java.lang.reflect.Method.invokeNative(Native Method)
02-06 23:15:33.747: ERROR/AndroidRuntime(1034): at java.lang.reflect.Method.invoke(Method.java:507)
02-06 23:15:33.747: ERROR/AndroidRuntime(1034): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
02-06 23:15:33.747: ERROR/AndroidRuntime(1034): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
02-06 23:15:33.747: ERROR/AndroidRuntime(1034): at dalvik.system.NativeStart.main(Native Method)
02-06 23:15:33.797: WARN/ActivityManager(61): Force finishing activity com.nokia.tmall/.Ad

 
发生错误原因分析:

canvas.drawText(text, length, width, paint);

此处的paint为null,报错。

解决办法:在AutoScrollTextView.java中初始化paint,为其赋值。

 paint = getPaint();

 

2
0
分享到:
评论

相关推荐

    android系统原码TextView.java

    android 8系统中的原码TextView.java, 可以查看官方的实现原理 ,对自定义 组件有一定 启发

    Android中TextView的定义.pdf

    TextView类继承自android.view.View类,并且是android.widget包下的一个成员,因此它是Android UI设计中的基础组件。TextView的主要职责是接收并显示文本,它可以是单行的,也可以通过设置多行显示。在Java代码中,...

    Android应用源码之4.TextView控件学习.zip

    2. 动态设置文本:在Java代码中,我们可以使用`TextView.setText()`方法来动态改变TextView的显示内容。 文本样式和格式化: 1. 字体样式:TextView支持粗体、斜体等样式,通过`android:textStyle`属性设置,如`...

    应用源码之4.TextView控件学习.zip

    TextView的基本使用包括设置文本、字体样式、颜色、大小等属性。例如,我们可以通过`android:text`属性来设置要显示的文本,`android:textSize`来调整字体大小,`android:textColor`来改变文字颜色,还可以通过`...

    TextView Html.fromHtml ScrollView——可追加自动显示最后行

    textView.setText(spannedText); final Handler handler = new Handler(); Runnable runnable = new Runnable() { @Override public void run() { // 滚动到最后一行 scrollView.fullScroll(ScrollView....

    ios-textView自动换行.zip

    textView.font = UIFont.systemFont(ofSize: 16) textView.lineSpacing = 4 ``` 3. **自动缩放高度**: 当用户输入的文本增加时,`textView`的高度可能需要动态调整。可以监听`textView`的`DidChange`通知,...

    Android实现TextView文字滚动.zip

    创建一个继承自TextView的自定义View,重写onDraw()方法,在其中计算并应用滚动偏移量,然后调用invalidate()方法触发重绘,以实现文本的手动滚动。 **注意事项** - Marquee效果可能不会立即启动,可能需要等待一...

    Android中继承TextView实现文字的跑马灯效果

    要创建自定义的跑马灯效果,我们首先创建一个新的Java类,让它继承自TextView。在新类中,我们将重写一些关键方法,以实现文本的自动滚动。这些方法可能包括`onDraw()`,用于绘制文字;`onMeasure()`,用于测量控件...

    Android textView应用简单示例.zip

    如果需要扩展TextView的功能,可以创建一个新的类继承自TextView,并添加额外的方法或属性。 总之,Android的TextView是构建用户界面不可或缺的一部分,熟练掌握其使用技巧和特性,能帮助开发者构建更丰富的UI交互...

    ios-TextView自适应.zip

    let newSize = textView.sizeThatFits(textView.bounds.size) if textView.bounds.height != newSize.height { UIView.animate(withDuration: 0.3) { textView.bounds.size.height = newSize.height } } } ```...

    IOS应用源码之自动为textView添加编辑框.zip

    textView.layer.borderColor = UIColor.gray.cgColor textView.layer.cornerRadius = 8.0 ``` 2. 使用内阴影:除了边框,还可以通过设置内阴影来创建编辑框效果。内阴影可以让`textView`看起来更有深度,提高视觉...

    动态设置textview的高.

    如果是RelativeLayout,可以使用`layout_height`属性。 ```java ViewGroup.LayoutParams layoutParams = getLayoutParams(); layoutParams.height = calculatedHeight; setLayoutParams(layoutParams); ``` 6...

    android textview全文和收起

    textView.setMaxLines(Integer.MAX_VALUE); toggleButton.setText("收起"); } else { textView.setMaxLines(5); toggleButton.setText("全文"); } } }); ``` 3. **文字折叠计算**: 为了准确地判断何时显示...

    Android代码-textView应用简单示例.zip

    textView.setTextColor(Color.parseColor("#FF0000")); // 设置红色文本 ``` 富文本: TextView还可以支持HTML文本,允许插入加粗、斜体、链接等元素: ```java String htmlText = "&lt;b&gt;加粗文本, 斜体文本&lt;/i&gt;"; ...

    智能家居系统 文本显示控件TextView-教案.doc

    教学过程中,教师将通过演示TextView的基本使用,展示如何在代码中创建和配置TextView,然后讲解其类继承结构,让学生理解其在Android组件中的地位。接着,深入讲解TextView的各个属性和方法,通过实例演示其效果。...

    ios-UITextView-可以和UITextField一样设置placeholder,支持autolayout布局,可以限制字数。.zip

    textView.placeholderLabel.font = [UIFont systemFontOfSize:15]; textView.placeholder = @"请输入文字..."; textView.font = [UIFont systemFontOfSize:15]; textView.frame = (CGRect){10,80,...

    ios-cell 中 放置textview 当编辑textview cell 高度随着变化。.zip

    例如,使用Auto Layout进行约束设置: ```swift // 在Swift中设置约束 func setupConstraints() { NSLayoutConstraint.activate([ textView.topAnchor.constraint(equalTo: contentView.topAnchor), textView....

    安卓textView相关-支持放大缩小的TextView使用.rar

    1. **自定义View**: 自定义TextView通常是通过继承Android的TextView类并重写其方法来实现的。开发者可能会覆盖`onDraw()`方法以控制文本的绘制方式,或者创建一个内部类来处理触摸事件,实现文本的放大和缩小。 2....

Global site tag (gtag.js) - Google Analytics