Нарисуйте растровое изображение вместо Rect - PullRequest
0 голосов
/ 02 апреля 2012

Для Андриода у меня есть этот код:

public Tank(int color) {
    bounds = new RectF();
    paint = new Paint();
    paint.setColor(color);
}

public void draw(Canvas canvas) {
    bounds.set(x - radius, y - radius, x + radius, y + radius);
    canvas.drawRect(bounds, paint);
}

где я рисую Rect, но теперь я хочу нарисовать растровое изображение вместо Rect, но

bitTank = BitmapFactory.decodeRescource(getRescource(),R.drawable.ic_launcher);

или

bitTank = BitmapFactory.decodeFile("C:\Users\...\res\drawable-hdpi\ic_launcher.png");

(оба) в сочетании с

canvas.drawBitmap(bitTank, matrix, null);

не работает.

Первый не знает getRescource(), а со вторым он больше не работает. Как я могу это понять? (Код находится в классе Tank, а другой класс вызывает функцию draw).

Ответы [ 2 ]

1 голос
/ 02 апреля 2012

Вторая версия просто не может работать, потому что вы пытаетесь получить доступ к файлу на вашем компьютере из приложения Android. Android ничего не знает о вашем локальном ПК.

С первым кодом вам необходим экземпляр Context для доступа к ресурсам. Вы можете передать контекст в свой конструктор и затем использовать его:

class Tank {
    Context context;
    ...

    public Tank(int color, Context ctx) {
        context = ctx;

        bounds = new RectF();
        paint = new Paint();
        paint.setColor(color);
    }

    public void draw(Canvas canvas) {
        ...
        bitTank = BitmapFactory.decodeRescource(context.getRescources(),R.drawable.ic_launcher);
        ...
    }
}

Хотя это не единственный способ добиться того, чего вы хотите, он должен помочь вам начать работу.

0 голосов
/ 02 апреля 2012

Это getResources() с 's' на конце.
Также убедитесь, что у вас есть контекст для получения ресурсов. Если вы выполняете вызов из вашего Tank класса, вам необходимо получить доступ к контексту другим способом, например, YourActivity.this, если Tank является внутренним классом, действием, или в противном случае передать его в конструктор:

public Tank(Context ctx, int color) {
    bitmap = BitmapFactory.decodeResource(ctx.getResources(), R.drawable.ic_launcher);
    //... other loading

}
...