2016-03-07 41 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