什么是位图和比特工厂?为什么人们将其与动画一起使用



我刚刚制作了我的第二个2D游戏应用程序(现在在安卓工作室),遇到了一些我不理解的东西。什么是位图和比特工厂?我看到它和动画一起使用。

我只是从2D动画开始,关于动画的额外提示和我绝对需要了解/应用的东西总是受欢迎的:)

什么是位图

可绘制资源是可绘制图形的一般概念。最简单的情况是图形文件(位图),它将在Android中通过BitmapDrawable类表示。

每个Drawable都作为单独的文件存储在其中一个res/Drawable文件夹中。通常,您会将不同分辨率的位图存储在res/drawable的-mdpi、-hdpi、-xhdpi和-xxhdpi子文件夹中。默认情况下,ADT项目创建向导会创建这些文件夹。如果这些位图在不同的文件夹中提供,Android系统会根据设备配置自动选择正确的位图。

如果您没有为所有支持的分辨率提供位图,Android系统会向上或向下缩放最接近的分辨率。这通常是不希望的,因为位图可能会变得模糊。

除了图形文件,Android还支持XML绘图和9补丁图形。XML绘图可用于描述形状(颜色、边框、渐变)、状态、过渡等。

9-patch图形用于定义如果使用该图形的视图大于图形,则应拉伸图形的哪个部分。

Drawables也可以用Java代码编写。实现Drawable的每个对象都可以在代码中用作Drawable。

我们如何使用它

Android允许您使用位图类来处理位图。本节介绍如何通过Java代码创建位图对象,以及如何将位图转换为Drawable对象,反之亦然。

如果需要,您可以在代码中加载任何可访问的位图文件,并将其转换为Drawables对象。

以下示例代码显示如何为assets文件夹创建位图对象并将其分配给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 b = BitmapFactory.decodeResource(getResources(), R.drawable.ic_action_search);

可以基于新的以像素为单位的权重和高度定义创建比例位图。

Bitmap originalBitmap = <initial setup>;
Bitmap resizedBitmap =
Bitmap.createScaledBitmap(originalBitmap, newWidth, newHeight, false);

要将位图对象转换为Drawable,可以使用以下代码。

将位图转换为可绘制

Drawable d = new BitmapDrawable(getResources(),bitmap);

最新更新