[英]What is a Bitmap and a Bitfactory and why do people use it with animations?
我剛剛制作了我的第二個 2D 游戲應用程序(現在在 Android Studio 中)並且遇到了一些我不明白的事情。 什么是位圖和位工廠? 我看到它與動畫一起使用。
我只是從 2D 動畫開始,關於動畫的額外提示和我絕對需要知道/應用的東西總是受歡迎的:)
Drawable 資源是可繪制圖形的一般概念。 最簡單的情況是圖形文件(位圖),它將通過 BitmapDrawable 類在 Android 中表示。
每個 Drawable 都作為單獨的文件存儲在 res/drawable 文件夾之一中。 通常,您會將不同分辨率的位圖存儲在 res/drawable 的 -mdpi、-hdpi、-xhdpi、-xxhdpi 子文件夾中。 默認情況下,ADT 項目創建向導會創建這些文件夾。 如果這些位圖位於不同的文件夾中,Android 系統會根據設備配置自動選擇正確的位圖。
如果您沒有為所有支持的分辨率提供位圖,Android 系統會向上或向下縮放最接近的尺寸。 這通常是不希望的,因為位圖可能會變得模糊。
除了圖形文件,Android 還支持 XML drawables 和 9-patch 圖形。 XML drawable 用於描述形狀(顏色、邊框、漸變)、狀態、轉換等。
9-patch 圖形用於定義如果使用該圖形的視圖大於該圖形時應拉伸圖形的哪一部分。
Drawable 也可以用 Java 代碼編寫。 每個實現 Drawable 的對象都可以在代碼中用作 Drawable。
Android 允許您使用 Bitmap 類來處理位圖。 本節介紹如何通過 Java 代碼創建 Bitmap 對象,以及如何將 Bitmap 轉換為 Drawable 對象,反之亦然。
如果需要,您可以在代碼中加載任何可訪問的位圖文件並將它們轉換為 Drawables 對象。
以下示例代碼顯示了如何為資產文件夾創建位圖對象並將其分配給 ImageView。
AssetManager manager = getAssets();
// read a Bitmap from Assets
InputStream open = null;
try {
open = manager.open("logo.png");
Bitmap bitmap = BitmapFactory.decodeStream(open);
// Assign the bitmap to an ImageView in this layout
ImageView view = (ImageView) findViewById(R.id.imageView1);
view.setImageBitmap(bitmap);
} catch (IOException e) {
e.printStackTrace();
} finally {
if (open != null) {
try {
open.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
您還可以從 res/drawable 文件夾中訪問 Drawables 作為源代碼中的 Bitmap 對象。 下面的代碼演示了這一點。
Bitmap b = BitmapFactory.decodeResource(getResources(), R.drawable.ic_action_search);
您可以根據新的重量和高度定義(以像素為單位)創建比例位圖。
Bitmap originalBitmap = <initial setup>;
Bitmap resizedBitmap =
Bitmap.createScaledBitmap(originalBitmap, newWidth, newHeight, false);
要將 Bitmap 對象轉換為 Drawable,您可以使用以下代碼。
Drawable d = new BitmapDrawable(getResources(),bitmap);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.