0

I have created a custom View which draws a line:

public class DrawView extends View { Paint paint = new Paint(); public DrawView(Context context) { super(context); paint.setColor(Color.BLACK); } @Override public void onDraw(Canvas canvas) { canvas.drawLine(0, 0, 100, 100, paint); } } 

I have a MainActivity class and activity_main layout where my layout contains an image and several buttons. I want to put the custom view that I created to my XML file(activity_main) where a line would be drawn on top of the image.

I tried adding it:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity"> //imageview and buttons here <com.myapp.alphasickbro.myapplication2.DrawView android:id="@+id/paintView" android:layout_width="100dp" android:layout_height="100dp" /> </RelativeLayout> 

Here is my MainActivity:

public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } } 

But when I run it, the app unfortunately stops. Did I miss something? What lines of code should I add?

Any answer would be appreciated

EDIT:

04-18 15:24:47.517 26732-26732/com.myapp.alphasickbro.myapplication2 E/AndroidRuntime﹕ FATAL EXCEPTION: main Process: com.myapp.alphasickbro.myapplication2, PID: 26732 java.lang.RuntimeException: Unable to start activity ComponentInfo{com.myapp.alphasickbro.myapplication2/com.myapp.alphasickbro.myapplication2.MainActivity}: android.view.InflateException: Binary XML file line #6: Error inflating class com.myapp.alphasickbro.myapplication2.DrawView at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2318) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2396) at android.app.ActivityThread.access$800(ActivityThread.java:139) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1293) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:149) at android.app.ActivityThread.main(ActivityThread.java:5268) 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:793) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:609) at dalvik.system.NativeStart.main(Native Method) Caused by: android.view.InflateException: Binary XML file line #6: Error inflating class com.myapp.alphasickbro.myapplication2.DrawView at android.view.LayoutInflater.createView(LayoutInflater.java:620) 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 com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:290) at android.app.Activity.setContentView(Activity.java:2002) at com.myapp.alphasickbro.myapplication2.MainActivity.onCreate(MainActivity.java:15) at android.app.Activity.performCreate(Activity.java:5411) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2270)             at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2396)             at android.app.ActivityThread.access$800(ActivityThread.java:139)             at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1293)             at android.os.Handler.dispatchMessage(Handler.java:102)             at android.os.Looper.loop(Looper.java:149)             at android.app.ActivityThread.main(ActivityThread.java:5268)             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:793)             at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:609)             at dalvik.system.NativeStart.main(Native Method) Caused by: java.lang.reflect.InvocationTargetException at java.lang.reflect.Constructor.constructNative(Native Method) at java.lang.reflect.Constructor.newInstance(Constructor.java:423) at android.view.LayoutInflater.createView(LayoutInflater.java:594)             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 com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:290)             at android.app.Activity.setContentView(Activity.java:2002)             at com.myapp.alphasickbro.myapplication2.MainActivity.onCreate(MainActivity.java:15)             at android.app.Activity.performCreate(Activity.java:5411)             at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)             at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2270)             at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2396)             at android.app.ActivityThread.access$800(ActivityThread.java:139)             at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1293)             at android.os.Handler.dispatchMessage(Handler.java:102)             at android.os.Looper.loop(Looper.java:149)             at android.app.ActivityThread.main(ActivityThread.java:5268)             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:793)             at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:609)             at dalvik.system.NativeStart.main(Native Method) Caused by: java.lang.NullPointerException at com.myapp.alphasickbro.myapplication2.DrawView.<init>(DrawView.java:27)             at java.lang.reflect.Constructor.constructNative(Native Method)             at java.lang.reflect.Constructor.newInstance(Constructor.java:423)             at android.view.LayoutInflater.createView(LayoutInflater.java:594)             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 com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:290)             at android.app.Activity.setContentView(Activity.java:2002)             at com.myapp.alphasickbro.myapplication2.MainActivity.onCreate(MainActivity.java:15)             at android.app.Activity.performCreate(Activity.java:5411)             at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)             at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2270)             at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2396)             at android.app.ActivityThread.access$800(ActivityThread.java:139)             at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1293)             at android.os.Handler.dispatchMessage(Handler.java:102)             at android.os.Looper.loop(Looper.java:149)             at android.app.ActivityThread.main(ActivityThread.java:5268)             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:793)             at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:609)             at dalvik.system.NativeStart.main(Native Method) 
4
  • 1
    Please show log-cat result Commented Apr 18, 2015 at 6:26
  • You have created a paintView in XML, but you have not set the canvas to it. Commented Apr 18, 2015 at 6:40
  • @Iqbal How would I do that? Can you post it as an answer. Just a newbie here Commented Apr 18, 2015 at 6:44
  • @ρяσѕρєяK logcat result is displayed Commented Apr 18, 2015 at 6:46

1 Answer 1

1

I think you need to add the missing constructors. Clean your project.

public class DrawView extends View { Paint paint; public DrawView(Context context) { super(context); init(); } public DrawView(Context context, AttributeSet attrs) { super(context, attrs); init(); } public DrawView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); init(); } private void init() { paint = new Paint(); paint.setColor(Color.BLACK); } } 
Sign up to request clarification or add additional context in comments.

3 Comments

Missing constructors? I already created a constructor for DrawView, what else should I add.
When you use your view from xml, the constructor with attributeset is used, since you had none.. The problem. See edit.
I tried it but it still stopped when I run it. No errors but when ran, a lot of errors are shown in logcat. I updated my post, pls see logcat if necessary.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.