1 概述
1.1 编写目的
学习Android图形Bitmap相关的知识,记录下来,方便后续学习及查询。
2 Bitmap图形
Bitmap图形,共有以下属性。
<?xml version="1.0" encoding="utf-8"?>
<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
android:src="@drawable/bitmap_280_180"
android:alpha="1"
android:antialias="true"
android:autoMirrored="true"
android:dither="true"
android:filter="true"
android:gravity="center"
android:mipMap="true"
android:tileMode="clamp"
android:tileModeX="clamp"
android:tileModeY="clamp"
android:tint="@color/green"
android:tintMode="add">
</bitmap>
2.1 Src属性
指向图片资源,不能使用shape、vector等自定义图形。
2.2 Alpha属性
透明度,["0~1" | "255~1"]透明到不透明。
2.3 Antialias属性
开关锯齿,["true" | "false"]。
2.4 AutoMirrored属性
设置图片是否需要镜像反转,当布局方向是RTL,即从右到左布局时才有用。
2.5 Dither属性
抖动,["true" | "false"]。值为“true”时,将在位图的像素配置与屏幕不同时(例如:ARGB 8888 位图和 RGB 565 屏幕)启用位图的抖动;值为“false”时则停用抖动。默认值为 true。
2.6 Filter属性
开关滤镜,["true" | "false"]。
2.7 Gravity属性
重心,["top " |" bottom "| " left "| " right "| " center "| " center_vertical "| " center_horizontal "| " fill "| " fill_vertical "| " fill_horizontal "| " clip_vertical "| " clip_horizontal"]。分别是:顶部、底部、左边、右边、中心、垂直中心、水平中心、填满容器、填满垂直方向、填满水平方向、剪切掉垂直方向多余容器部分、剪切掉水平方向多余容器部分。
2.8 MipMap属性
是否将图片标记为mipmap,使用mipmap能够提高显示性能,默认为false ,["true" | "false"]。
2.9 TileMode属性
TileMode:贴图模式, ["clamp" | "disable" | "repeat" | "mirror"]。
2.9.1 Clamp(边缘填充)
当图片>容器时,图片多余的部分会被截去;当图片<容器时,会复制图片的边缘部分填充空白。
创建my_bitmap.xml(图片宽868、高579):
<?xml version="1.0" encoding="utf-8"?>
<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
android:src="@drawable/bitmap_868_579">
</bitmap>
效果如下:
<?xml version="1.0" encoding="utf-8"?>
<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
android:src="@drawable/bitmap_868_579"
android:tileMode="clamp">
</bitmap>
效果如下:
<?xml version="1.0" encoding="utf-8"?>
<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
android:src="@drawable/bitmap_280_180"
android:tileMode="clamp">
</bitmap>
效果如下:
2.9.2 Disable(缩放)
图片会根据容器大小进行缩放(默认值),如2.9.1第一图所示。
2.9.3 Repeat(重复填充)
图片会重复填充满容器。但是当图片>容器时,多余部分会被截去。修改my_bitmap.xml为(图片宽280、高180):
<?xml version="1.0" encoding="utf-8"?>
<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
android:src="@drawable/bitmap_280_180"
android:tileMode="repeat">
</bitmap>
效果如下:
<?xml version="1.0" encoding="utf-8"?>
<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
android:src="@drawable/bitmap_868_579"
android:tileMode="repeat">
</bitmap>
效果如下:
2.9.4 Mirror(镜像重复填充)
图片会以镜像重复的形式填满容器。同样,当图片>容器时,多余部分会被截去。修改my_bitmap.xml为(图片宽280、高180):
<?xml version="1.0" encoding="utf-8"?>
<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
android:src="@drawable/bitmap_280_180"
android:tileMode="mirror">
</bitmap>
效果如下:
<?xml version="1.0" encoding="utf-8"?>
<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
android:src="@drawable/bitmap_868_579"
android:tileMode="mirror">
</bitmap>
效果如下:
2.10 TileModeX属性
单独控制bitmap的X轴TileMode属性,覆盖TileMode属性。
修改my_bitmap.xml为(图片宽280、高180):<?xml version="1.0" encoding="utf-8"?>
<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
android:src="@drawable/bitmap_280_180"
android:tileMode="mirror"
android:tileModeX="mirror"
android:tileModeY="clamp">
</bitmap>
或
<?xml version="1.0" encoding="utf-8"?>
<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
android:src="@drawable/bitmap_280_180"
android:tileModeX="mirror"
android:tileModeY="clamp">
</bitmap>
效果如下:
2.11 TileModeY属性
单独控制bitmap的Y轴TileMode属性,覆盖TileMode属性,如2.10所示。
2.12 Tint属性
设置着色。
2.13 TintMode属性
着色模式和Tint一起使用,["src_over" | "src_in" | "src_atop" | "screen"| "add"| "multiply"]。下面分别为着色tint="#FF00FF00"和tint="#8800FF00"在各种着色模式下面的效果。
2.13.1 Src_over
2.13.2 Src_in
2.13.3 Src_atop