androidandroid-canvasandroid-viewsvg-android

Canvas is not Showing Image/Drawable


I am doing a work on SVG Paths and Image. I have loaded SVG file and get an image and try to set thi image on canvas . But canvas is not showing image. I check the height and width and null check of this image/picture and it is not null so i am unable to understand that why canvas is not showing image. any help

My code:

public class MainActivity extends Activity{

    Context c;


    @Override
    public void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);




        c=getApplicationContext();
        setContentView(new GameView(this));
    }


    public class GameView extends View{
        private int width, height;

        private long svgId;

        Picture picture;

        long startTime;
        float scaleFactor;

        public GameView(Context context) {
            super(context);



            SVG svg = SVGParser.getSVGFromResource(getResources(),R.raw.android);
            picture = svg.getPicture();




        }



        @Override

        protected void onLayout (boolean changed, int left, int top, int right, int bottom) {

            // get visible area

            width = right - left;

            height = bottom - top;

        }



        @Override

        public void onDraw(Canvas canvas) {

            // paint a white background...

            canvas.drawColor(Color.BLACK);

            if (canvas!=null)
            {
                Toast.makeText(c, "yahooooooooooooooooo"+picture.getHeight(), Toast.LENGTH_LONG).show();

                scaleFactor=Math.min((float)getHeight()/picture.getHeight(),(float)getWidth()/picture.getWidth());
                canvas.scale((float)scaleFactor,(float)scaleFactor);
                canvas.drawPicture(picture);
            }

        }

    }
}

Solution

  • This is what I use to return a drawable object that I will use through all my app
    It works quite well.

    final BitmapDrawable getSVG_Drawable
        (int svgResourceID, int width, int height)
    {
        // Get a Picture from the SVG in res/raw.
        final SVG vector =
            SVGParser.getSVGFromResource(getResources(), svgResourceID);
    
        final DisplayMetrics metrics = new DisplayMetrics();
        getWindowManager().getDefaultDisplay().getMetrics(metrics);
    
        // Redraw the picture to a new size.
        final Bitmap bmp =
            Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
        final Canvas cnv = new Canvas(bmp);
        cnv.setDensity((int) (metrics.xdpi));
    
        cnv.drawPicture(vector.getPicture(), new Rect(0, 0, width, height));
        final BitmapDrawable drw = new BitmapDrawable(getResources(), bmp);
    
        // Return the drawable.
        return drw;
    }