2011-09-26 47 views
1
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; 
    } 
} 
+0

我认为正确的问题必须是:与BitmapDrawable相比,FastBitmapDrawable有哪些优势? –

回答

3

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

一个FastBitmapDrawable 包含一个传统的位图,并做了一些假设,使它在某些情况下使用方便。这是至关重要的线:

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

这FastBitmapDrawable假设该位图将被放置在(0,0)在屏幕上,而没有特殊的油漆对象将被用于绘制它。

真的这只是一个方便。您可以通过手动将位置设置为(0,0)并将Paint设置为null来获得相同的性能,但这个类会自动为您执行此操作。

+0

早先我从这个角度比较了imageView.setImageBitmap(bitmap);' 'imageView。 setImageDrawable(fastBitmapDrawable);' 随着你的关键线的解释,它真的帮助我了解'FastBitmapDrawable' – bitbybit

0

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

+0

为什么叫做FastBitmapDrawable? – bitbybit

+0

这是快速(简单)的代码,它不会更快。我想这不是一个好名字。 – Caner

+0

也许是因为他们选择这样称呼?它有助于绘制位图而不需要定义自己的drawable,这就是它快速的原因,所以... – Knickedi

相关问题