2012-04-02 3 views
0

Для Andriod У меня есть этот код:Draw Bitmap вместо Rect

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, но теперь я хочу, чтобы нарисовать Bitmap вместо 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).

+0

Спасибо за редактирование, он не работал, когда я пытался отформатировать его ... – user1053864

ответ

1

во втором версия просто не может работать, потому что вы пытаетесь получить доступ к файлу на своем ПК из внутреннего приложения 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

Зная, что мой вопрос кажется глупым, спасибо: P – user1053864

0

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

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

}