0

Here is my code:

public class CustomKeyboardView extends KeyboardView {

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


    @Override
    public void onDraw(Canvas canvas) {
        super.onDraw(canvas);

        Paint paintBackground = new Paint();
        paintBackground.setTextAlign(Paint.Align.CENTER);
        paintBackground.setTextSize(48);
        paintBackground.setColor(Color.YELLOW);


        List<Key> keys = getKeyboard().getKeys();
        for(Key key: keys) {
            if(key.label != null && key.codes[0] == 110)
                canvas.drawRect(key.x, key.y, key.x+key.width, key.y+key.height, paintBackground);

                paintBackground.setColor(Color.WHITE);
                canvas.drawText(key.label.toString(), key.x + (key.width / 2),
                        key.y + (key.height / 2), paintBackground);

        }
    }


}

The strange thing is that if I comment out canvas drawRect or canvas drawText, the other one works fine, but if I leave them both in, I get this error:

        FATAL EXCEPTION: main Process: com.alpha.alphaproto, PID: 6540
    java.lang.NullPointerException
        at com.alpha.alphaproto.CustomKeyboardView.onDraw(CustomKeyboardView.java:48)
        at android.view.View.draw(View.java:14465)
        at android.view.View.getDisplayList(View.java:13362)
        at android.view.View.getDisplayList(View.java:13404)
        at android.view.View.draw(View.java:14182)
        at android.view.ViewGroup.drawChild(ViewGroup.java:3103)
        at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2940)
        at android.view.View.getDisplayList(View.java:13357)
        at android.view.View.getDisplayList(View.java:13404)
        at android.view.View.draw(View.java:14182)
        at android.view.ViewGroup.drawChild(ViewGroup.java:3103)
        at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2940)
        at android.view.View.draw(View.java:14468)
        at android.widget.FrameLayout.draw(FrameLayout.java:472)
        at android.view.View.getDisplayList(View.java:13362)
        at android.view.View.getDisplayList(View.java:13404)
        at android.view.View.draw(View.java:14182)
        at android.view.ViewGroup.drawChild(ViewGroup.java:3103)
        at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2940)
        at android.view.View.getDisplayList(View.java:13357)
        at android.view.View.getDisplayList(View.java:13404)
        at android.view.View.draw(View.java:14182)
        at android.view.ViewGroup.drawChild(ViewGroup.java:3103)
        at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2940)
        at android.view.View.draw(View.java:14468)
        at android.widget.FrameLayout.draw(FrameLayout.java:472)
        at com.android.internal.policy.impl.PhoneWindow$DecorView.draw(PhoneWindow.java:2326)
        at android.view.View.getDisplayList(View.java:13362)
        at android.view.View.getDisplayList(View.java:13404)
        at android.view.HardwareRenderer$GlRenderer.buildDisplayList(HardwareRenderer.java:1570)
        at android.view.HardwareRenderer$GlRenderer.draw(HardwareRenderer.java:1449)
        at android.view.ViewRootImpl.draw(ViewRootImpl.java:2377)
        at android.view.ViewRootImpl.performDraw(ViewRootImpl.java:2249)
        at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1879)
        at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:996)
        at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5600)
        at android.view.Choreographer$CallbackRecord.run(Choreographer.java:761)
        at android.view.Choreographer.doCallbacks(Choreographer.java:574)
        at android.view.Choreographer.doFrame(Choreographer.java:544)
        at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:747)
        at android.os.Handler.handleCallback(Handler.java:733)
        at android.os.Handler.dispatchMessage(Handler.java:95)
        at android.os.Looper.loop(Looper.java:136)
        at android.app.ActivityThread.main(ActivityThread.java:5001)
        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:785)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
        at dalvik.system.NativeStart.main(Native Method

I'm mystified. Any help would be much appreciated.

scrayne
  • 701
  • 7
  • 18

2 Answers2

0

This is a modification. The above code doesn't work in either case. Here is the code where either the drawText or the drawRect work, but not together:

    Paint paintBackground = new Paint();
    paintBackground.setTextAlign(Paint.Align.CENTER);
    paintBackground.setTextSize(48);
    paintBackground.setColor(Color.YELLOW);

    Paint paint = new Paint();
    paint.setTextAlign(Paint.Align.CENTER);
    paint.setTextSize(48);
    paint.setColor(Color.BLACK);

    List<Key> keys = getKeyboard().getKeys();
    for(Key key: keys) {
        if(key.label != null && key.codes[0] == 110)
            //canvas.drawText(key.label.toString(), key.x + (key.width/2), key.y + 25, paint);
            canvas.drawRect(key.x, key.y, key.x+key.width, key.y+key.height, paintBackground);
            canvas.drawText(key.label.toString(), key.x + (key.width / 2),
                    key.y + (key.height / 2), paint);

    }
scrayne
  • 701
  • 7
  • 18
0

I fixed it. There was a missing bracket.

scrayne
  • 701
  • 7
  • 18