android - Trouble with Drawing a Bitmap on a Canvas -


i trying draw image onto canvas, , while program compiles , behaves expect to, error log shows there nullpointerexception associated drawbitmap() method below. strange image still drawn canvas. issue , how should go resolving it?

my code:

public class progressbar extends view {     string packagename;      public progressbar(context context)     {         super(context);         packagename = context.getpackagename();     }      public progressbar(context context, attributeset attribs)     {         super(context, attribs);         packagename = context.getpackagename();     }      @override     protected void ondraw(canvas canvas)     {         super.ondraw(canvas);          int resourceid = getresources().getidentifier("bar1", "drawable", packagename);         bitmap bitmap = bitmapfactory.decoderesource(getresources(), resourceid);         canvas.drawbitmap(bitmap, 35, 35, null);     }      @override     protected void onmeasure(int widthmeasurespec, int heightmeasurespec)     {         // super.onmeasure(widthmeasurespec, heightmeasurespec);         mwidth = view.measurespec.getsize(widthmeasurespec);         mheight = view.measurespec.getsize(heightmeasurespec);         setmeasureddimension(mwidth, mheight);     } } 

error log:

java.lang.nullpointerexception @ android.graphics.canvas.throwifrecycled(canvas.java:1057) @ android.graphics.canvas.drawbitmap(canvas.java:1097) @ com.myapp.progressbar.ondraw(progressbar.java:50) @ android.view.view.draw(view.java:13944) @ android.view.view.draw(view.java:13825) @ android.view.viewgroup.drawchild(viewgroup.java:3083) @ android.view.viewgroup.dispatchdraw(viewgroup.java:2920) @ android.view.view.draw(view.java:13823) @ android.view.viewgroup.drawchild(viewgroup.java:3083) @ android.view.viewgroup.dispatchdraw(viewgroup.java:2920) @ android.view.view.draw(view.java:13823) @ android.view.viewgroup.drawchild(viewgroup.java:3083) @ android.view.viewgroup.dispatchdraw(viewgroup.java:2920) @ android.view.view.draw(view.java:13823) @ android.view.viewgroup.drawchild(viewgroup.java:3083) @ android.view.viewgroup.dispatchdraw(viewgroup.java:2920) @ android.view.view.draw(view.java:13947) @ android.view.view.draw(view.java:13825) @ android.view.viewgroup.drawchild(viewgroup.java:3083) @ android.view.viewgroup.dispatchdraw(viewgroup.java:2920) @ android.view.view.draw(view.java:13947) 

you should never pull bitmap out of resources in ondraw because ondraw called numerous times per second, there no way have time decode resource every single time ondraw called.

you should decode bitmap in constructor, save off in class variable , use in in ondraw.

so, basically, need this:

//add bitmap class variable private bitmap bitmap;  //move these constructor int resourceid = getresources().getidentifier("bar1", "drawable", packagename); bitmap = bitmapfactory.decoderesource(getresources(), resourceid); 

and should work.


Comments

Popular posts from this blog

Unable to remove the www from url on https using .htaccess -