Draw background of custom View from .png file on Android

前端 未结 2 1792
滥情空心
滥情空心 2021-01-13 03:16

I created a custom View by extending from View. In onDraw() I managed to draw some circles and other stuff. But now I want to add a background from a resource (sd card or a

2条回答
  •  情书的邮戳
    2021-01-13 04:01

    You actually don't want to draw on to the bitmap you load, you just want to draw it on the Canvas, so you should use Canvas.drawBitmap(). You also really should not load a Bitmap in each onDraw(), do it in the constructor instead. Try this class:

    package com.example.android;
    
    import android.content.Context;
    import android.graphics.Bitmap;
    import android.graphics.BitmapFactory;
    import android.graphics.Canvas;
    import android.util.AttributeSet;
    import android.view.View;
    
    public class CustomView extends View {
        private final Bitmap mBitmapFromSdcard;
    
        public CustomView(Context context) {
            this(context, null);
        }
    
        public CustomView(Context context, AttributeSet attrs) {
            super(context, attrs);
            mBitmapFromSdcard = BitmapFactory.decodeFile("/mnt/sdcard/download/tux.png");
        }
    
        @Override
        protected void onDraw(Canvas canvas) {
            Canvas g = canvas;
            if (mBitmapFromSdcard != null) {
                g.drawBitmap(mBitmapFromSdcard, 0, 0, null);
            }
        }
    }
    

    You can also let Android draw the bitmap in the background:

    package com.example.android;
    
    import android.content.Context;
    import android.graphics.Bitmap;
    import android.graphics.BitmapFactory;
    import android.graphics.drawable.BitmapDrawable;
    import android.util.AttributeSet;
    import android.view.View;
    
    public class CustomView extends View {
        public CustomView(Context context) {
            this(context, null);
        }
    
        public CustomView(Context context, AttributeSet attrs) {
            super(context, attrs);
            Bitmap bm = BitmapFactory.decodeFile("/mnt/sdcard/download/tux.png");
            if (bm != null) {
                setBackgroundDrawable(new BitmapDrawable(bm));
            }
        }
    }
    

提交回复
热议问题