与Bitmap相比,FastBitmapDrawable有哪些优势?

时间:2011-09-26 12:28:16

标签: android drawable

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 个答案:

答案 0 :(得分:3)

将FastBitmapDrawable与Bitmap进行比较并不公平。传统的位图只是Java中的一种Object。但是,FastBitmapDrawables是一个自定义类,用于扩展Drawable类的功能,而不是Bitmap类。

FastBitmapDrawable 包含传统的Bitmap,并做了一些假设,以便在某些情况下使用。这是关键路线:

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

这个FastBitmapDrawable假设位图将放在屏幕上的(0,0),并且不会使用任何特殊的Paint对象来绘制它。

真的只是方便。您可以通过手动将位置设置为(0,0)并将普通Drawable中的“绘制”设置为空来获得相同的性能,但此类会自动为您执行此操作。

答案 1 :(得分:0)

这是一个实用程序类,以防您想要更改Bitmap的绘制方式。实际上,它不会添加除默认行为之外的任何功能。