Почему демо-компас карт Android использует делегата для класса SmoothCanvas? - PullRequest
3 голосов
/ 24 июля 2010

В Android MapsDemo, доступной в Eclipse для Google API, они создают внутренний класс SmoothCanvas в MapViewCompassDemo.java. Внутри этого класса, по-видимому, заново реализуем каждый метод и перенаправляем его на экземпляр делегата Canvas.

static final class SmoothCanvas extends Canvas {
    Canvas delegate;

    private final Paint mSmooth = new Paint(Paint.FILTER_BITMAP_FLAG);

    public void setBitmap(Bitmap bitmap) {
        delegate.setBitmap(bitmap);
    }

    public void setViewport(int width, int height) {
        delegate.setViewport(width, height);
    }
    ...

Какой смысл делегата в этом случае?

Ответы [ 2 ]

1 голос
/ 25 июля 2010

Значение delegate передается в dispatchDraw. Класс SmoothCanvas является оберткой вокруг delegate. Посредством делегирования реализация Canvas, переданная в dispatchDraw, выполняет всю тяжелую работу. Обертка позволяет только впрыскивать сглаженную краску без реализации всей логики Canvas.

0 голосов
/ 24 июля 2010

Ключевым моментом делегирования в этом случае является:

private final Paint mSmooth = new Paint(Paint.FILTER_BITMAP_FLAG);

FILTER_BITMAP_FLAG бит.Фильтрация влияет на выборку растровых изображений при их преобразовании.Фильтрация не влияет на преобразование цветов в растровом изображении в пиксели устройства.Это зависит от дизеринга и xfermodes.

Активируя этот флаг, рисование растровых изображений в основном повысит его производительность.В примере вы будете использовать mSmoth при каждом вызове drawBitmap.

...