今天在重写ImageView组件的时候,重写工作完成了,完成功能就是多点放大缩小图片,可是运行工程整个程序就crash掉了,并抛出如图运行时异常:
搞了好久才把问题解决了,原来是在重写组件的时候必须实现View里面的三个构造方法,而我只实现了一个。
下面我把从网上找到的几个可能引起该异常的情况总结一下:
第一种:自定义View,必须实现基类View的三个构造方法;
public ZoomImageControl(Context context) { super(context); } public ZoomImageControl(Context context,AttributeSet attrs,int defStyle) { super(context,attrs,defStyle); } public ZoomImageControl(Context context,AttributeSet attrs) { super(context,attrs); }
第二种:自定义了一个View,将他用于布局文件中的时候,假设他的包名为cn.example,类名叫TestDemo,这个时候你在XML作为布局元素来布局的话,必须使用完整路径名,也就是包名加类名来引用cn.example.TestDemo。
第三种:资源文件有可能没有找到,因为系统应用在编译时并不一定会将所有分辨率的资源文件都打包到apk文件里。也就是在res/drawable-xxx文件夹里面的文件。系统会根据分辨率来选择加载不同drawable下文件夹的资源