2016-03-07 38 views
4

我有一个自定义的ImageView类,如下android.view.InflateException:在编写自定义的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 

但它完美的作品时,我使用的ImageView不是自定义的ImageView(MyImageView)的。那么我的代码有什么问题?任何帮助表示赞赏。

+0

后您的xml文件 – Jas

回答

6

从XML扩展自定义视图时,必须具有所有正确的构造函数。 尝试添加这些构造函数还有一个你有

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

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

这是问题.Thanks –

+0

谢谢!刚刚花了30分钟。 – Zach