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;
    }
}

最佳答案

比较FastBitmapDrawable和Bitmap是不公平的。传统位图只是Java中的Object类型。但是,FastBitmapDrawables是为扩展Drawable类而不是Bitmap类的功能而编写的自定义类。

FastBitmapDrawable包含传统的位图,并进行一些假设使其在某些情况下可以方便使用。这是关键行:

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


此FastBitmapDrawable假定位图将被放置在屏幕上的(0,0)处,并且不会使用特殊的Paint对象来绘制它。

真的,这只是一个方便。通过在常规Drawable中手动将位置设置为(0,0)并将Paint设置为null,可以获得相同的性能,但是此类自动为您完成此操作。

关于android - 与Bitmap相比,FastBitmapDrawable有哪些优势?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7555054/

10-11 02:53