2011-09-26 49 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

相關問題