2012-04-02 16 views
0

Für Andriod habe ich diesen Code:Bitmap Zeichnen statt 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); 
} 

, wo ich eine Rect bin zeichnen, aber jetzt möchte ich anstelle eines Rect eine Bitmap zeichnen, aber

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

oder

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

(beide) in Kombination mit

canvas.drawBitmap(bitTank, matrix, null); 

funktioniert nicht.

Die erste weiß nicht getRescource() und mit der zweiten funktioniert es nicht mehr. Wie kann ich das erkennen? (Der Code ist in der Klasse Tank und eine andere Klasse ruft die Zeichenfunktion auf).

+0

Danke für die Bearbeitung, es hat nicht funktioniert, als ich versuchte, es zu formatieren ... – user1053864

Antwort

1

Die zweite Die Version kann einfach nicht funktionieren, weil Sie versuchen, über die Android-App auf eine Datei auf Ihrem PC zuzugreifen. Android weiß nichts über Ihren lokalen PC.

Mit dem ersten Code benötigen Sie eine Instanz von Context für den Zugriff auf Ressourcen. Sie können einen Kontext in Ihrem Konstruktor übergeben und dann verwenden:

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); 
     ... 
    } 
} 

Zwar ist dies nicht der einzige Weg ist, zu erreichen, was Sie wollen, es sollte Sie erhalten begonnen.

+0

Wissen, dass meine Frage dumm erscheint, danke: P – user1053864

0

Es ist getResources() mit einem 's' am Ende.
Stellen Sie außerdem sicher, dass Sie über einen Kontext verfügen, aus dem die Ressourcen abgerufen werden können. Wenn Sie den Anruf aus Ihrer Tank Klasse zu tun, müssen Sie auf eine andere Weise den Kontext zugreifen, entweder als YourActivity.this wenn Tank eine innere Klasse ist eine Tätigkeit, oder es in den Konstruktor übergeben sonst:

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

} 
Verwandte Themen