Каковы преимущества FastBitmapDrawable по сравнению с Bitmap? - PullRequest
1 голос
/ 26 сентября 2011
package com.android.launcher;

import android.graphics.drawable.Drawable;
import android.graphics.PixelFormat;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.ColorFilter;

class FastBitmapDrawable extends Drawable {
    private Bitmap mBitmap;

    FastBitmapDrawable(Bitmap b) {
    mBitmap = b;
    }

    @Override
    public void draw(Canvas canvas) {
    canvas.drawBitmap(mBitmap, 0.0f, 0.0f, null);
    }

    @Override
    public int getOpacity() {
    return PixelFormat.TRANSLUCENT;
    }

    @Override
    public void setAlpha(int alpha) {
    }

    @Override
    public void setColorFilter(ColorFilter cf) {
    }

    @Override
    public int getIntrinsicWidth() {
    return mBitmap.getWidth();
    }

    @Override
    public int getIntrinsicHeight() {
    return mBitmap.getHeight();
    }

    @Override
    public int getMinimumWidth() {
    return mBitmap.getWidth();
    }

    @Override
    public int getMinimumHeight() {
    return mBitmap.getHeight();
    }

    public Bitmap getBitmap() {
    return mBitmap;
    }
}

Ответы [ 2 ]

3 голосов
/ 26 сентября 2011

Нечестно сравнивать FastBitmapDrawable с растровым изображением. Традиционные растровые изображения - это просто тип Object в Java. FastBitmapDrawables, однако, являются пользовательским классом, написанным для расширения функциональности класса Drawable, а не класса Bitmap.

FastBitmapDrawable содержит традиционное растровое изображение и делает несколько предположений, которые делают его удобным для использования в определенных ситуациях. Это важнейшая строка:

canvas.drawBitmap(mBitmap, 0.0f, 0.0f, null);

Этот FastBitmapDrawable предполагает, что растровое изображение будет размещено в (0, 0) на экране и что для его рисования не будет использоваться специальный объект Paint.

На самом деле это просто удобство. Вы можете получить ту же производительность, вручную установив позицию (0, 0) и Paint в null в обычном Drawable, но этот класс сделает это за вас автоматически.

0 голосов
/ 26 сентября 2011

Это служебный класс, если вы хотите изменить способ рисования Bitmap. Как таковой, он не добавляет никакой функциональности, кроме поведения по умолчанию.

...