Растровое изображение не рисуется на холсте-андроиде

Я хочу загружать изображения из галереи в свой CustomView, не изменяя их соотношение сторон, а затем я хочу рисовать на них.

У меня есть собственное представление, которое я добавил динамически из MainActivity следующим образом:

       @Override
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if(data!=null && requestCode==PICK_PHOTO_CODE)
        {
            Uri photoUri=data.getData();
            Glide.with(context).asBitmap().load(photoUri).into(new CustomTarget<Bitmap>() {
                @Override
                public void onResourceReady(@NonNull Bitmap resource, @Nullable Transition<? super Bitmap> transition) {
                    source_bitmap=resource;
                    RelativeLayout rL=findViewById(R.id.relative);
                    CustomView customView=new CustomView(getApplicationContext(),source_bitmap);
                    RelativeLayout.LayoutParams params=new RelativeLayout.LayoutParams(source_bitmap.getWidth(),source_bitmap.getHeight());
                    customView.setLayoutParams(params);
                    rL.addView(customView);
                }

                @Override
                public void onLoadCleared(@Nullable Drawable placeholder) {

                }
            });
        }
    }

И это мой класс CustomView:

      public class CustomView extends View {
    Context context;
    Bitmap source_bitmap;
    Bitmap bitmap;
    Canvas mCanvas;

    public CustomView(Context context, Bitmap sourceBitmap) {
        super(context);
        this.context=context;
        this.source_bitmap=sourceBitmap;
        init();
    }
    public void init()
    {

    }

    @Override
    protected void onSizeChanged(int w, int h, int oldW, int oldH) {
        super.onSizeChanged(w, h, oldW, oldH);
        bitmap=Bitmap.createBitmap(source_bitmap.getWidth(),source_bitmap.getHeight(), Bitmap.Config.ARGB_8888);
        mCanvas=new Canvas(bitmap);
        mCanvas.drawBitmap(source_bitmap,0,0,null);
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        mCanvas.drawBitmap(bitmap,0,0,null);
    }
}

Проблема в том, что битмап изображения, выбранного из Галереи, не рисуется на нем, и я не могу понять, в чем проблема. Кто-нибудь может помочь?

1 ответ

Проблема заключалась в методе onDraw, для рисования должен использоваться переданный холст, т.е. холст, а не mCanvas. Так,

Вместо

      mCanvas.drawBitmap(bitmap,0,0,null);

использовать

      canvas.drawBitmap(bitmap,0,0,null);

Только тогда мы сможем увидеть результаты. В первом случае он обязательно отрисовывается, но холст, связанный с пользовательским представлением, — это холст, а не mCanvas. Это мое понимание. Если вы найдете что-то неправильное, сделайте комментарий.

Другие вопросы по тегам