Android Drawable基础(四)

1.TransitionDrawable(渐变资源)

他用于显示两个Drawable之间的淡入淡出的效果。

?:每个可绘制对象由单一 元素内的 元素表示。不支持超过两个项目。要向前转换,请调用 startTransition()。要向后转换,则调用 reverseTransition()。

  1. 语法
<?xml version="1.0" encoding="utf-8"?>
<transition
xmlns:android="http://schemas.android.com/apk/res/android" >
    <item
        android:drawable="@[package:]drawable/drawable_resource"
        android:id="@[+][package:]id/resource_name"
        android:top="dimension"
        android:right="dimension"
        android:bottom="dimension"
        android:left="dimension" />
</transition>

?:item接受bitmap元素

  1. 新建transition_bg.xml
<?xml version="1.0" encoding="utf-8"?>
<transition xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/android3" />
    <item android:drawable="@drawable/android1" />
</transition>
  1. 布局代码中使用
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/view"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <ImageButton
        android:visibility="visible"
        android:layout_centerInParent="true"
        android:id="@+id/image"
        android:src="@drawable/transition_bg"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

</RelativeLayout>
  1. Activity中找到drawable并设置转换的时间

TransitionDrawable drawable = (TransitionDrawable) imageButton.getDrawable();
drawable.startTransition(5000);


public class MainActivity extends AppCompatActivity {

    private ImageButton imageButton;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        imageButton = findViewById(R.id.image);
        TransitionDrawable drawable = (TransitionDrawable) imageButton.getDrawable();
        drawable.startTransition(5000);
    }
}
  1. 效果图
    Android Drawable基础(四)

2.InsetDrawable(插入)

在 XML 文件中定义的以指定距离插入其他可绘制对象的资源。当视图需要小于视图实际边界的背景时,此类可绘制对象很有用。

例:为一个充满整个屏幕的LinearLayout布局指定背景图,是否可以让背景图不充满屏幕?
此例子就可以用InsetDrawable来实现
  1. 语法
<?xml version="1.0" encoding="utf-8"?>
<inset
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:drawable="@drawable/drawable_resource"
    android:insetTop="dimension"
    android:insetRight="dimension"
    android:insetBottom="dimension"
    android:insetLeft="dimension" />

属性:

说明
android:drawable 资源
android:insetTop 距顶部插入
android:insetRight 距右部插入
android:insetBottom 距底部插入
android:insetLeft 距左部插入
  1. 新建inset_bg.xml
<?xml version="1.0" encoding="utf-8"?>
<inset xmlns:android="http://schemas.android.com/apk/res/android"
    android:drawable="@drawable/in"
    android:insetBottom="20dp"
    android:insetTop="20dp"
    android:insetLeft="20dp"
    android:insetRight="20dp"
    />

  1. 布局代码中使用
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/view"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <ImageView
        android:visibility="visible"
        android:id="@+id/image_view"
        android:src="@drawable/inset_bg"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />
</RelativeLayout>
  1. 效果(四周空白为inset的距离)
    Android Drawable基础(四)

未使用InsetDrawable效果图如下:
Android Drawable基础(四)