Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/193.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
android.view.InflateException:在编写自定义imageView时_Android_Imageview - Fatal编程技术网

android.view.InflateException:在编写自定义imageView时

android.view.InflateException:在编写自定义imageView时,android,imageview,Android,Imageview,我有一个自定义的ImageView类,如下所示 public class MyImageView extends ImageView { public MyImageView(Context context) { super(context); // TODO Auto-generated constructor stub } @Override protected void onDraw(Canvas canvas) { // TODO Auto-generated

我有一个自定义的ImageView类,如下所示

public class MyImageView extends ImageView
{

public MyImageView(Context context) {
    super(context);
    // TODO Auto-generated constructor stub
}

@Override
protected void onDraw(Canvas canvas) {
    // TODO Auto-generated method stub
    Paint p = new Paint(Paint.ANTI_ALIAS_FLAG);
    canvas.drawLine(0, 0, 20, 20, p);
    super.onDraw(canvas);
}
}
在我的Activity类中,Oncreate方法定义为

MyImageView imageView;
      // It works perfect when i use ImageView instead of MyImageView 
 @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    imageView=(MyImageView)findViewById(R.id.image);
    Bitmap dbitmap = BitmapFactory.decodeResource(getResources(), R.drawable.dinkan);
    Bitmap bitmap = dbitmap.copy(Bitmap.Config.ARGB_8888, true);
    Canvas canvas = new Canvas(bitmap);
    Paint paint = new Paint();
    paint.setColor(Color.BLACK);
    imageView.setImageBitmap(bitmap);
}
它以一个由InflateException引起的RuntimeException结束。错误日志如下所示

java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.hari.myapplication/com.example.hari.myapplication.MainActivity}: android.view.InflateException: Binary XML file line #26: Error inflating class com.example.hari.myapplication.MyImageView
          at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2338)
          at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2390)
          at android.app.ActivityThread.access$800(ActivityThread.java:151)
          at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1321)
          at android.os.Handler.dispatchMessage(Handler.java:110)
          at android.os.Looper.loop(Looper.java:193)
          at android.app.ActivityThread.main(ActivityThread.java:5299)
          at java.lang.reflect.Method.invokeNative(Native Method)
          at java.lang.reflect.Method.invoke(Method.java:515)
          at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:829)
          at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:645)
          at dalvik.system.NativeStart.main(Native Method)
       Caused by: android.view.InflateException: Binary XML file line #26: Error inflating class com.example.hari.myapplication.MyImageView
          at android.view.LayoutInflater.createView(LayoutInflater.java:603)
          at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:696)
          at android.view.LayoutInflater.rInflate(LayoutInflater.java:755)
          at android.view.LayoutInflater.inflate(LayoutInflater.java:492)
          at android.view.LayoutInflater.inflate(LayoutInflater.java:397)
          at android.view.LayoutInflater.inflate(LayoutInflater.java:353)
          at android.support.v7.app.AppCompatDelegateImplV7.setContentView(AppCompatDelegateImplV7.java:256)
          at android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.java:109)
          at com.example.hari.myapplication.MainActivity.onCreate(MainActivity.java:29)
          at android.app.Activity.performCreate(Activity.java:5264)
          at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1088)
          at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2302)
          at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2390) 
          at android.app.ActivityThread.access$800(ActivityThread.java:151) 
          at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1321) 
          at android.os.Handler.dispatchMessage(Handler.java:110) 
          at android.os.Looper.loop(Looper.java:193) 
          at android.app.ActivityThread.main(ActivityThread.java:5299) 
          at java.lang.reflect.Method.invokeNative(Native Method) 
          at java.lang.reflect.Method.invoke(Method.java:515) 
          at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:829) 
          at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:645) 
          at dalvik.system.NativeStart.main(Native Method) 
       Caused by: java.lang.NoSuchMethodException: <init> [class android.content.Context, interface android.util.AttributeSet]
          at java.lang.Class.getConstructorOrMethod(Class.java:472)
          at java.lang.Class.getConstructor(Class.java:446)
          at android.view.LayoutInflater.createView(LayoutInflater.java:568)
          at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:696) 
          at android.view.LayoutInflater.rInflate(LayoutInflater.java:755) 
          at android.view.LayoutInflater.inflate(LayoutInflater.java:492) 
          at android.view.LayoutInflater.inflate(LayoutInflater.java:397) 
          at android.view.LayoutInflater.inflate(LayoutInflater.java:353) 
          at android.support.v7.app.AppCompatDelegateImplV7.setContentView(AppCompatDelegateImplV7.java:256) 
          at android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.java:109) 
          at com.example.hari.myapplication.MainActivity.onCreate(MainActivity.java:29) 
          at android.app.Activity.performCreate(Activity.java:5264) 
          at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1088) 
          at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2302) 
          at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2390) 
          at android.app.ActivityThread.access$800(ActivityThread.java:151) 
          at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1321) 
          at android.os.Handler.dispatchMessage(Handler.java:110) 
          at android.os.Looper.loop(Looper.java:193) 
          at android.app.ActivityThread.main(ActivityThread.java:5299) 
          at java.lang.reflect.Method.invokeNative(Native Method
java.lang.RuntimeException:无法启动活动组件信息{com.example.hari.myapplication/com.example.hari.myapplication.MainActivity}:android.view.InflateException:二进制XML文件行#26:膨胀类com.example.hari.myapplication.MyImageView时出错
在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2338)上
位于android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2390)
在android.app.ActivityThread.access$800(ActivityThread.java:151)
在android.app.ActivityThread$H.handleMessage(ActivityThread.java:1321)
位于android.os.Handler.dispatchMessage(Handler.java:110)
位于android.os.Looper.loop(Looper.java:193)
位于android.app.ActivityThread.main(ActivityThread.java:5299)
位于java.lang.reflect.Method.Invokenactive(本机方法)
位于java.lang.reflect.Method.invoke(Method.java:515)
在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:829)上
位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:645)
在dalvik.system.NativeStart.main(本机方法)
原因:android.view.InflateException:二进制XML文件行#26:膨胀类com.example.hari.myapplication.MyImageView时出错
位于android.view.LayoutInflater.createView(LayoutInflater.java:603)
位于android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:696)
位于android.view.LayoutInflater.rInflate(LayoutInflater.java:755)
在android.view.LayoutInflater.inflate(LayoutInflater.java:492)
在android.view.LayoutInflater.inflate(LayoutInflater.java:397)
在android.view.LayoutInflater.充气(LayoutInflater.java:353)
在android.support.v7.app.AppCompateDelegateImplv7.setContentView(AppCompateDelegateImplv7.java:256)上
位于android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.java:109)
位于com.example.hari.myapplication.MainActivity.onCreate(MainActivity.java:29)
位于android.app.Activity.performCreate(Activity.java:5264)
位于android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1088)
在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2302)上
位于android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2390)
在android.app.ActivityThread.access$800(ActivityThread.java:151)
在android.app.ActivityThread$H.handleMessage(ActivityThread.java:1321)
位于android.os.Handler.dispatchMessage(Handler.java:110)
位于android.os.Looper.loop(Looper.java:193)
位于android.app.ActivityThread.main(ActivityThread.java:5299)
位于java.lang.reflect.Method.Invokenactive(本机方法)
位于java.lang.reflect.Method.invoke(Method.java:515)
在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:829)上
位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:645)
在dalvik.system.NativeStart.main(本机方法)
原因:java.lang.NoSuchMethodException:[类android.content.Context,接口android.util.AttributeSet]
位于java.lang.Class.GetConstructorMethod(Class.java:472)
位于java.lang.Class.getConstructor(Class.java:446)
在android.view.LayoutInflater.createView(LayoutInflater.java:568)
位于android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:696)
位于android.view.LayoutInflater.rInflate(LayoutInflater.java:755)
在android.view.LayoutInflater.inflate(LayoutInflater.java:492)
在android.view.LayoutInflater.inflate(LayoutInflater.java:397)
在android.view.LayoutInflater.充气(LayoutInflater.java:353)
在android.support.v7.app.AppCompateDelegateImplv7.setContentView(AppCompateDelegateImplv7.java:256)上
位于android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.java:109)
位于com.example.hari.myapplication.MainActivity.onCreate(MainActivity.java:29)
位于android.app.Activity.performCreate(Activity.java:5264)
位于android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1088)
在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2302)上
位于android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2390)
在android.app.ActivityThread.access$800(ActivityThread.java:151)
在android.app.ActivityThread$H.handleMessage(ActivityThread.java:1321)
位于android.os.Handler.dispatchMessage(Handler.java:110)
位于android.os.Looper.loop(Looper.java:193)
位于android.app.ActivityThread.main(ActivityThread.java:5299)
位于java.lang.reflect.Method.Invokenactive(本机方法

但是,当我使用imageview而不是自定义imageview(MyImageView)时,它工作得非常好。那么,我的代码有什么问题吗?非常感谢您的帮助。

从XML扩展自定义视图时,您必须拥有所有正确的构造函数。 尝试添加这些构造函数以及您拥有的构造函数

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

public MyImageView(Context context, AttributeSet attrs, int defStyle) {
    super(context, attrs, defStyle);
}

这就是问题所在。谢谢你!我才花了30分钟。