Vì vậy, tôi đang cố gắng hiểu cách sử dụng đúng khả năng tăng tốc phần cứng (nếu có) trong tùy chỉnh View
liên tục hoạt ảnh. Đây là tiền đề cơ bản của onDraw()
tôi:Sử dụng Lớp phần cứng trong Chế độ xem tùy chỉnh trênDraw
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);
Tôi đang tạo điều kiện cho các lớp phần cứng trong onAttachedToWindow()
và vô hiệu hóa chúng trong onDetachedFromWindow()
, nhưng tôi đang cố gắng để hiểu hay không Tôi thực sự sử dụng nó. Về cơ bản, vòng lặp i/j
gọi drawBitmap()
không bao giờ thay đổi; điều duy nhất thay đổi là bản dịch Canvas
. Có phải Bitmap
được lưu tự động vào GPU dưới dạng kết cấu đằng sau hậu trường hay không hoặc có điều gì tôi cần thực hiện theo cách thủ công để làm như vậy không?
Tôi có thể đã hiểu nhầm câu hỏi nhưng bạn có đặt 'setLayerType (View.LAYER_TYPE_HARDWARE, null);' cho chế độ xem của bạn không? GPU Caches các hình ảnh chỉ miễn là người dùng đang tích cực di chuyển nhưng không khác, như là một sự cân bằng cho tiêu thụ tài nguyên ít hơn. – Slartibartfast
@Slartibartfast Vâng, tôi đã đặt loại lớp thành phần cứng. Người dùng sẽ không bao giờ thực sự cuộn; chế độ xem đang di chuyển nội dung của chính nó liên tục. Tôi có thể hiểu nhầm về tăng tốc HW, nhưng tôi cảm thấy như lưới của bitmap tôi đang vẽ sẽ có thể được đưa vào một lớp phần cứng và chỉ dịch thay vì vẽ lại các ảnh bitmap trên mọi khung hình. – kcoppock