
其他Draw文章参考:
Android中Drawable整体介绍
前言
一个Drawable,可以根据当前级别值更改另一个Drawable的大小。 您可以控制Drawable的宽度和高度根据关卡变化的程度,以及重力来控制放置在整个容器中的位置。 最常用来实现诸如进度条之类的东西。
默认级别可以使用android:level属性从XML中指定。 未指定此属性时,默认级别为0,对应于零高度和/或宽度,具体取决于为android.R.styleable#ScaleDrawable_scaleWidth scaleWidth和android.R.styleable#ScaleDrawable_scaleHeight scaleHeight指定的值。 在运行时,级别可以通过setLevel(int)来设置。
Good idea
ScaleDrawable通过level控制,如果通过Handler一样类似的配合使用,就能实现了动态效果,这样比起动画来也是不错的。
一些必要的说明
Level属性从0到10000,默认是0,但是如果是0的话,就是不可见的。
如果ScaleDrawable的级别越大,那么内部的Drawable看起来就越大。
如果ScaleDrawable的等级为了10000,那么就没有缩放效果。
如果ScaleDrawable的XML中所定义的缩放比例越大,那么内部的Drawable看起来就越小。
语法
<?xml version="1.0" encoding="utf-8"?>
<scale
xmlns:android="http://schemas.android.com/apk/res/android"
android:drawable="@drawable/drawable_resource"
android:scaleGravity=["top" | "bottom" | "left" | "right" | "center_vertical" |
"fill_vertical" | "center_horizontal" | "fill_horizontal" |
"center" | "fill" | "clip_vertical" | "clip_horizontal"]
android:scaleHeight="percentage"
android:scaleWidth="percentage" />
<scale>
定义缩放可绘制对象。这必须是根元素。
属性:
xmlns:android
字符串。必备。定义 XML 命名空间,其必须是 "http://schemas.android.com/apk/res/android"。
android:drawable
可绘制对象资源。必备。引用可绘制对象资源。
android:scaleGravity
关键字。指定缩放后的重力位置。
必须是以下一个或多个(用 '|' 分隔)常量值:

android:scaleHeight
百分比。缩放高度,表示为可绘制对象边界的百分比。值的格式为 XX%。例如:100%、12.5% 等。
android:scaleWidth
百分比。缩放宽度,表示为可绘制对象边界的百分比。值的格式为 XX%。例如:100%、12.5% 等
测试例子
<?xml version="1.0" encoding="utf-8"?>
<scale xmlns:android="http://schemas.android.com/apk/res/android"
android:drawable="@drawable/test"
android:scaleGravity="bottom"
android:scaleHeight="50%"
android:scaleWidth="50%"
>
</scale>
在XML中使用
<View
android:id="@+id/view_my_view"
android:layout_width="match_parent"
android:layout_height="50dp"
android:layout_marginTop="140dp"
android:background="@drawable/scale_drawable"
/>
在代码中得到
View testView = findViewById(R.id.view_my_view);
ScaleDrawable scaleDrawable = (ScaleDrawable) testView.getBackground();
scaleDrawable.setLevel(100);
testView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(DrawableActivity.this,"点击了有效区域",Toast.LENGTH_SHORT).show();
}
});
结果如图:

通过测试,你点击图片可以触发点击事件,由于view是铺满全屏的,所以你点击旁边空白处也可以触发点击事件。
网友评论