java-Android自定义view,空指针异常求解决

问题描述

Android自定义view,空指针异常求解决
package com.drawview.drawview;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.LinearLayout;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.linearlayout);
        LinearLayout l = (LinearLayout)findViewById(R.layout.linearlayout);
        DrawView dv = new DrawView(this);
        dv.setMinimumHeight(300);
        dv.setMinimumWidth(300);
        l.addView(dv);
    }
}

package com.drawview.drawview;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;

public class DrawView extends View{
    private float currentX = 30;
    private float currentY = 30;
    Paint p = new Paint();
    public DrawView(Context context) {
        super(context);
    }

    public DrawView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        currentX = event.getX();
        currentY = event.getY();
        invalidate();
        return true;
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        p.setColor(Color.MAGENTA);
        canvas.drawCircle(currentX,currentY,15,p);
    }
}

【错误提示】
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.LinearLayout.addView(android.view.View)' on a null object reference
at com.drawview.drawview.MainActivity.onCreate(MainActivity.java:17)
我知道错误的意思,也知道发生在哪儿,就是不知道怎么解决。

解决方案

LinearLayout l = (LinearLayout)findViewById(R.layout.linearlayout);这段代码不对,虽然R.layout.linearlayout也是int型,但不是控件,findViewById是找控件的。可以这么解决,把这段代码改成 LinearLayout l = (LinearLayout)findViewById(R.id.lin);,然后在你的布局文件中添加一个LinearLayout的控件:
android:id="@+id/lin"
android:layout_height="match_parent"
android:layout_width="match_parent">

</LinearLayout>

解决方案二:

findViewById只能用来找到控件,这个就只能去在view里面嵌入一个布局了,给这个布局指定id

解决方案三:

LinearLayout l = (LinearLayout)findViewById(R.layout.linearlayout);
应该是R.id.linearlayout,通过id找xml布局中的控件
R.layout.linearlayout,这样是找xml布局

解决方案四:

LinearLayout l = (LinearLayout)findViewById(R.layout.linearlayout);
这句错了
你应该在布局里面的id,而不是布局本身
你可以给linearLayout添加一个id,就跟其他的控件一样,例如button
也是需要添加id才能获取的
关注我的专栏,http://blog.csdn.net/kangaroo835127729,谢谢

解决方案五:

添加自定义view出现空指针异常

时间: 2024-09-08 18:23:44

java-Android自定义view,空指针异常求解决的相关文章

android获取Dialog中edittext内容时空指针异常求解决

问题描述 android获取Dialog中edittext内容时空指针异常求解决 import android.app.Activity; import android.app.AlertDialog; import android.content.DialogInterface; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.widge

Android自定义View实现支付宝支付成功-极速get花式Path炫酷动画

本文手把手教你图片->SVG->Path的姿势.. 从此酷炫Path动画,如此简单. 效果先随便上几个图,以后你找到的图有多精彩,gif就有多精彩: 随便搜了一个铅笔画的图,丢进去 随手复制的二维码icon 来自大佬wing的铁塔 前文回顾 这里简单回顾一下前文,GIF如下图: PathAnimView接受的唯一数据源是Path(给我一个Path,还你一个动画View) 所以内置了几种将别的资源->Path的方法: 直接传string.(A-Z,0-9 "." &qu

android-Android获取Dialog中的edittext内容空指针异常求解决

问题描述 Android获取Dialog中的edittext内容空指针异常求解决 import android.app.Activity; import android.app.AlertDialog; import android.content.DialogInterface; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.widge

Android 自定义 view 控件实例

Android自定义view通过继承系统的View并重写部分方法来满足自己的特定需要.首先我们来看一下都有哪些方法可能需要被重写: onMeasure() 检测View组件及其子组件的大小 onLayout() 当该组件需要分配其子组件的位置.大小时 onTouchEvent 当发生触屏事件时 onDraw() 当组件将要绘制它的内容时 onKeyDown 当按下某个键盘时 onKeyUp  当松开某个键盘时 onTrackballEvent 当发生轨迹球事件时 onSizeChange() 当

Android自定义View实现等级滑动条的实例

Android自定义View实现等级滑动条的实例 实现效果图: 思路: 首先绘制直线,然后等分直线绘制点: 绘制点的时候把X值存到集合中. 然后绘制背景图片,以及图片上的数字. 点击事件down的时候,换小图片为大图片.move的时候跟随手指移动. up的时候根据此时的X计算最近的集合中的点,然后自动吸附回去. 1,自定义属性 <?xml version="1.0" encoding="utf-8"?> <resources> <dec

android自定义view插入xml

问题描述 android自定义view插入xml 自定义View代码如下.我希望把这个view插入到一个layout的xml的文件中.一直出错,错误类型是error inflating class.应该是这个View出的问题package com.example.browserstation; import java.util.Timer;import java.util.TimerTask; import android.content.Context;import android.graph

Android自定义View之使用贝塞尔曲线实现流量进度条

第一次写带图片的博客,多少还是有点紧张,效果不好,请将就着看,前面的图是今天要写的控件的效果图,元素不多,分别是一个按钮和一个自定义的控件. 在此以前,我看过许多的书,比如<Android群英传>.<第一行代码>等,也看了很多大神的博客,但是即便是这样,当我看到这么多代码的时候,一直都没有真正的动手去敲过这些代码,以至于我总是觉得自定义View是一个多么高深莫测的技术,我们这些小白是难以触及的,但是当昨晚看了一篇鸡汤之后,觉得人还是要学会专注,要耐得住寂寞,要沉得住气.所以在未来的

Android自定义View——自定义搜索框(SearchView)

概述 在Android开发中,当系统数据项比较多时,常常会在app添加搜索功能,方便用户能快速获得需要的数据.搜索栏对于我们并不陌生,在许多app都能见到它,比如豌豆荚 在某些情况下,我们希望我们的自动补全信息可以不只是纯文本,还可以像豌豆荚这样,能显示相应的图片和其他数据信息,因此Android给我们提供的AutoCompleteTextView往往就不够用,在大多情况下我们都需要自己去实现搜索框. 分析 根据上面这张图,简单分析一下自定义搜索框的结构与功能,有  1. 搜索界面大致由三部门组

Android自定义View之圆形进度条总结

最近撸了一个圆形进度条的开源项目,算是第一次完完整整的使用自定义 View .在此对项目开发思路做个小结,欢迎大家 Star 和 Fork. 该项目总共实现了三种圆形进度条效果 CircleProgress:圆形进度条,可以实现仿 QQ 健康计步器的效果,支持配置进度条背景色.宽度.起始角度,支持进度条渐变 DialProgress:类似 CircleProgress,但是支持刻度 WaveProgress:实现了水波纹效果的圆形进度条,不支持渐变和起始角度配置,如需此功能可参考 CircleP