Próbuję więc zrozumieć, w jaki sposób mogę właściwie użyć przyspieszania sprzętowego (jeśli jest dostępne) w niestandardowym View
, który jest nieustannie animowany. Jest to podstawowa przesłanka moich onDraw()
:Używanie warstwy sprzętowej w widoku niestandardowym onDraw
canvas.drawColor(mBackgroundColor);
for (Layer layer : mLayers) {
canvas.save();
canvas.translate(layer.x, layer.y);
//Draw that number of images in a grid, offset by -1
for (int i = -1; i < layer.xCount - 1; i++) {
for (int j = -1; j < layer.yCount - 1; j++) {
canvas.drawBitmap(layer.bitmap, layer.w * i, layer.h * j, null);
}
}
//If the layer's x has moved past its width, reset back to a seamless position
layer.x += ((difference * layer.xSpeed)/1000f);
float xOverlap = layer.x % layer.w;
if (xOverlap > 0) {
layer.x = xOverlap;
}
//If the layer's y has moved past its height, reset back to a seamless position
layer.y += ((difference * layer.ySpeed)/1000f);
float yOverlap = layer.y % layer.h;
if (yOverlap > 0) {
layer.y = yOverlap;
}
canvas.restore();
}
//Redraw the view
ViewCompat.postInvalidateOnAnimation(this);
mam umożliwiając warstw sprzętowych w onAttachedToWindow()
i wyłączając je w onDetachedFromWindow()
, ale staram się zrozumieć, czy ja rzeczywiście go używać. Zasadniczo, pętla i/j
, która wywołuje drawBitmap()
nigdy się nie zmienia; jedyną zmianą jest tłumaczenie Canvas
. Czy Bitmap
jest automatycznie zapisywany na GPU jako tekstura za kulisami, czy też jest coś, co muszę zrobić ręcznie, aby to zrobić?
mógłbym źle pytanie ale czy ustawiłeś "setLayerType (View.LAYER_TYPE_HARDWARE, null);" dla twojego widoku? GPU buforuje obrazy tylko tak długo, jak użytkownik aktywnie przewija, ale nie robi inaczej, jako kompromis dla zużywania mniejszych zasobów. – Slartibartfast
@Slartibartfast Tak, ustawiłem typ warstwy na sprzęt. Użytkownik nigdy nie będzie przewijany; widok cały czas przewija własną treść. Być może nie rozumiem akceleracji HW, ale czuję, że siatka rysowanych bitmap powinna być w stanie zostać przekształcona w warstwę sprzętową i po prostu przetłumaczyć zamiast przerysować mapy bitowe w każdej klatce. – kcoppock