Drawable
是 Android 中用于绘制可绘制对象的基本类,它可以是位图、形状、图层列表等。Drawable
可以用于在界面上绘制图形、背景、图标等。以下是有关 Drawable
的知识总结和使用办法,附加了详细的代码示例:
1. 创建 Drawable
对象: 你可以使用以下方法来创建不同类型的 Drawable
对象。
-
BitmapDrawable: 从位图创建
Drawable
。Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.icon); Drawable drawable = new BitmapDrawable(getResources(), bitmap);
-
ShapeDrawable: 创建基本形状的
Drawable
,如矩形、椭圆、圆形等。ShapeDrawable shapeDrawable = new ShapeDrawable(new RectShape());
-
LayerDrawable: 创建多个图层的
Drawable
。Drawable[] layers = new Drawable[2]; layers[0] = getResources().getDrawable(R.drawable.background); layers[1] = getResources().getDrawable(R.drawable.icon); LayerDrawable layerDrawable = new LayerDrawable(layers);
2. 设置 Drawable
: 你可以设置 Drawable
的属性,如边界、颜色、形状等。
-
设置边界:
drawable.setBounds(0, 0, width, height);
-
设置颜色:
if (drawable instanceof ShapeDrawable) { ShapeDrawable shapeDrawable = (ShapeDrawable) drawable; shapeDrawable.getPaint().setColor(Color.RED); }
3. 在界面上绘制 Drawable
: 你可以在布局文件中使用 ImageView
或其他 View
来显示 Drawable
。
<ImageView
android:id="@+id/imageView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/my_drawable" />
或者在代码中设置 Drawable
:
ImageView imageView = findViewById(R.id.imageView);
imageView.setImageDrawable(drawable);
4. 动态绘制 Drawable
: 你可以使用 Canvas
来动态绘制 Drawable
,例如绘制自定义形状、文本等。
Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(bitmap);
drawable.setBounds(0, 0, width, height);
drawable.draw(canvas);
5. 从资源加载 Drawable
: 通常,你会从资源中加载 Drawable
。
Drawable drawable = getResources().getDrawable(R.drawable.icon);
6. 使用 StateListDrawable
: StateListDrawable
允许你在不同状态下显示不同的 Drawable
,如正常状态、按下状态等。
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/normal_drawable" android:state_pressed="false" />
<item android:drawable="@drawable/pressed_drawable" android:state_pressed="true" />
</selector>
这个示例创建了一个状态选择器,根据按钮的按下状态来显示不同的 Drawable
。
补充Android 中的 StateListDrawable的取值:
state_activated
:表示当前状态,通常用于表示被按下或选中的按钮。state_pressed
:表示按下状态,通常用于表示按下但未放开的按钮。state_selected
:表示选中状态,通常用于表示被选中的列表项或复选框。state_checkable_selected
:表示选中且可选中的状态,通常用于表示可选中的单选框或复选框。state_enabled
:表示可用状态,通常用于表示可点击的按钮或可选择的列表项。state_disabled
:表示不可用状态,通常用于表示不可点击的按钮或不可选择的列表项。state_checked
:表示选中且已勾选的状态,通常用于表示已勾选的复选框。state_window_focused
:表示窗口获取焦点的状态,通常用于表示当前具有焦点的输入框。state_default
:表示默认状态,通常用于表示未设置特定状态的其他元素。
7. 使用 VectorDrawable
: VectorDrawable
允许以矢量形式绘制图形,以便在不同屏幕密度上获得更好的图像质量。
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24.0"
android:viewportHeight="24.0">
<path
android:fillColor="#FF000000"
android:pathData="M12,2C6.48,2 2,6.48 2,12s4.48,10 10,10s10,-4.48 10,-10S17.52,2 12,2z M12,20c-4.41,0 -8,-3.59 -8,-8s3.59,-8 8,-8s8,3.59 8,8s-3.59,8 -8,8zM11,7h2v7h-2z"/>
</vector>
这是一个简单的 VectorDrawable
示例,它描述了一个矢量图标。
Drawable
是 Android 中用于绘制图形和图像的强大工具,可以用于实现各种界面元素的自定义外观和行为。根据需要选择不同类型的 Drawable
,并设置相应的属性,以满足你的应用程序需求。