2017-11-29 2 views
0

Ich entwickle ein Android-Projekt mit Leinwand und ich habe ein Skalierungsproblem. um es einfacher zu machen, werde ich ein Beispiel verwenden.Skalieren einer Leinwand auf Android

Angenommen, meine Ansicht ist: Breite 1300px und Höhe 800px, ich lege eine Leinwand hinein, die eine statische Breite 1300px geht, aber die Höhe ist eine Variable. Wenn meine Leinwand> 800px ist, wird die Leinwand aus der Ansicht verschwinden, also habe ich versucht, canvas.scale() zu verwenden, aber ich weiß nicht, wie ich den genauen Wert berechnen soll, der in die Skala eingefügt werden soll!

Irgendwelche Ideen?

+0

Ich bin mir nicht sicher, ob ich Ihre Frage richtig beantwortet habe. Sind Sie sich nicht sicher, wie viel yScale-Faktor beim Aufruf von 'canvas.scale (xScale, yScale) 'gesetzt werden soll. Wollen Sie auch, dass Ihre Leinwandgröße der Breite und Höhe des Geräts entspricht? –

Antwort

0

Ich persönlich, ich denke, Sie sollten eine neue Canvas erstellen. Um das zu tun, sollten Sie zunächst die Bitmapgröße ändern. Verwenden Sie die folgende Methode, um den Maßstab zwischen Größe der Ansicht und Größe der Bitmap zu berechnen.

public static float computeScale(float w1, float h1, float w2, float h2) { 
    if (w1 > 0 && h1 > 0 && w2 > 0 && h2 > 0) { 
     return Math.max(w1/w2, h1/h2); 
    } 

    return 1; 
} 

So ist der Maßstab und die neue Bitmap-Breite werden Höhe durch den Code unten berechnet werden:

float scale = computeScale(viewWidth, viewHeight, bitmapWith, bitmapHeight); 
if(scale > 1){ 
    int newWidth = Math.round(bitmapWidth/scale); 
    int newHeight = Math.round(bitmapHeight/scale); 
} 

// The code for resizing the source bitmap with the newWidth and newHeight. 
// Bitmap newBitmap = ...; 

Schließlich Sie die neue Bitmap verwenden, um ein neues Canvas zu erstellen.

Canvas canvas = new Canvas(newBitmap); 
Verwandte Themen