Android 与位图相比,FastBitmapDrawable有哪些优点?

Android 与位图相比,FastBitmapDrawable有哪些优点?,android,drawable,Android,Drawable,这是一个实用程序类,用于更改位图的绘制方式。实际上,除了默认行为之外,它没有添加任何功能。将FastBitmapDrawable与位图进行比较是不公平的。传统的位图在Java中只是一种对象。然而,FastBitmapDrawables是一个定制类,它是为了扩展Drawable类的功能而编写的,而不是Bitmap类 FastBitmapDrawable包含一个传统位图,并进行了一些假设,以便于在某些情况下使用。这是关键的一行: package com.android.launcher; impo

这是一个实用程序类,用于更改位图的绘制方式。实际上,除了默认行为之外,它没有添加任何功能。

将FastBitmapDrawable与位图进行比较是不公平的。传统的位图在Java中只是一种
对象
。然而,FastBitmapDrawables是一个定制类,它是为了扩展
Drawable
类的功能而编写的,而不是
Bitmap

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

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假定位图将放置在屏幕上的(0,0)处,并且不会使用特殊的绘制对象来绘制它


真的,这只是一种方便。通过手动将位置设置为(0,0),并在正常的
可绘制的
中将绘制设置为null,可以获得相同的性能,但该类会自动为您执行此操作。

为什么称为FastBitmapDrawable?它是快速(简单)代码,绘制速度不会更快。我想这不是一个好名字。也许是因为他们选择这样称呼它?它有助于绘制位图,而无需定义自己的可绘制位图,这就是它速度快的原因,因此…前面我从这个角度比较了
imageView.setImageBitmap(位图)
imageView.setImageDrawable(fastBitmapDrawable)
通过您对关键行的解释,它确实帮助我理解了
FastBitmapDrawable的用法
我认为正确的问题应该是:与BitmapDrawable相比,FastBitmapDrawable有哪些优点?
canvas.drawBitmap(mBitmap, 0.0f, 0.0f, null);