Подтвердить что ты не робот

Нарисовать объект/изображение на холсте

Есть ли другой способ нарисовать объект на холсте в андроиде?

Этот код внутри draw() не работает:  

Bitmap bmp = BitmapFactory.decodeResource(getResources(), R.drawable.pushpin);
canvas.drawBitmap(bmp, screenPts.x, screenPts.y-50, null);

Ну, на самом деле, он работает над моим первым кодом, но когда я перенес его в другой класс MarkOverlay, он больше не работает.

  markerOverlay = new MarkerOverlay(getApplicationContext(), p);
                      listOfOverlays.add(markerOverlay);  

Какой параметр следует передать в MarkerOverlay, чтобы заставить этот код работать? Ошибка находится где-то в getResources().

FYI, canvas.drawOval отлично работает, но я действительно хочу сделать изображение не овалом.:)

4b9b3361

Ответ 1

package com.canvas;

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.view.View;

public class Keypaint extends View {
    Paint p;

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        p=new Paint();
        Bitmap b=BitmapFactory.decodeResource(getResources(), R.drawable.icon);
        p.setColor(Color.RED);
        canvas.drawBitmap(b, 0, 0, p);
    }

    public Keypaint(Context context) {
        super(context);
    }
}

Ответ 2

Я предпочитаю делать это, поскольку он только генерирует изображение один раз:

public class CustomView extends View {

    private Drawable mCustomImage;

    public CustomView(Context context, AttributeSet attrs) {
        super(context, attrs);
        mCustomImage = context.getResources().getDrawable(R.drawable.my_image);
    }

    ...

    protected void onDraw(Canvas canvas) {
        Rect imageBounds = canvas.getClipBounds();  // Adjust this for where you want it

        mCustomImage.setBounds(imageBounds);
        mCustomImage.draw(canvas);
    }
}