Android Drawable(二)

来源:互联网 发布:男加厚棉服淘宝 编辑:程序博客网 时间:2024/06/05 09:37

概述

之前已经介绍了ShapeDrawable的主要使用方法,今天将主要介绍一些其他的Android定义好的drawable类,如BitmapDrawable、LayerDrawable等。

Drawable官网地址:https://developer.android.com/guide/topics/resources/drawable-resource.html

BitmapDrawable

xml定义

<bitmap xmlns:android="http://schemas.android.com/apk/res/android"    android:src="@[package:]drawable/drawable_resource"    android:antialias=["true" | "false"]    android:dither=["true" | "false"]    android:filter=["true" | "false"]    android:gravity=["top" | "bottom" | "left" | "right" | "center_vertical" |                      "fill_vertical" | "center_horizontal" | "fill_horizontal" |                      "center" | "fill" | "clip_vertical" | "clip_horizontal"]    android:mipMap=["true" | "false"]    android:tileMode=["disabled" | "clamp" | "repeat" | "mirror"] />

属性解释

  • andorid:src:指定的图片资源id
  • android:antialias:抗锯齿效果,使得图片在显示时显得更加平滑。
  • android:dither:抖动效果,当图片的像素和设备的屏幕像素不一样时,在一定程度上减少图片的失真。
  • android:filter:滤镜效果,使图片被压缩拉升能够有好的显示效果。
  • android:gravity:设置图片的摆放位置。
  • android:mipMap:不太明白这个属性的作用
  • android:tileMode:平铺模式。默认disable不开启平铺。repeat重复模式;mirror在水平或者竖直方向上实现投影效果;clamp在图片拉升时让图片四周的像素扩展到周围区域
  • android:tileModeX和android:tileModeY:作用同android:tileMode,分别指定水平和竖直方向上的平铺模式。

gravity属性详解

具体使用

<?xml version="1.0" encoding="utf-8"?><bitmap xmlns:android="http://schemas.android.com/apk/res/android"    android:antialias="true"    android:dither="true"    android:filter="true"    android:gravity="center"    android:src="@drawable/mao1"    android:tileMode="mirror"    android:tileModeX="repeat"    android:tileModeY="mirror"></bitmap>//代码中引用    <ImageView        android:layout_width="240dp"        android:layout_height="320dp"        android:background="@drawable/bitmapdrawable" />

效果如下:

repeat模式:
repeat模式

mirror模式:
mirror模式

clamp模式:
clamp模式

LayerDrawable

LayerDrawable:对应于标签,它实现一种层次化的drawable集合,通过将不同的drawable放在不同的层次上显示一种叠加的效果。默认情况下,中的所有的drawable都会被缩放至View的大小,为了避免这种情况,可以通过使用避免图片的缩放。

xml定义

<?xml version="1.0" encoding="utf-8"?><layer-list    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" /></layer-list>

属性解释

  • android:left、android:top、android:right、android:bottom:分别表示图片在view上的偏移量
  • android:id:表示每个item的id,可以通过该id修改图片的属性
  • android:drawable:图片资源

具体使用

<?xml version="1.0" encoding="utf-8"?><layer-list xmlns:android="http://schemas.android.com/apk/res/android">    <item        android:drawable="@drawable/mao1"        android:left="0dp"        android:top="0dp" />    <item        android:drawable="@drawable/mao2"        android:left="30dp"        android:top="30dp" />    <item        android:drawable="@drawable/mao3"        android:left="60dp"        android:top="60dp" /></layer-list><?xml version="1.0" encoding="utf-8"?><layer-list xmlns:android="http://schemas.android.com/apk/res/android">    <item>        <bitmap            android:gravity="center"            android:src="@drawable/mao1" />    </item>    <item        android:left="30dp"        android:top="30dp">        <bitmap            android:gravity="center"            android:src="@drawable/mao2" />    </item>    <item        android:left="60dp"        android:top="60dp">        <bitmap            android:gravity="center"            android:src="@drawable/mao3" />    </item></layer-list>

效果图:
layerlistdrawable演示

LevelListDrawable

LevelListDrawable,对应于标签,它同样表示一个drawable集合,集合中的每个item都会设置一个等级,这样通过设置item的Level,实现显示不同的drawable。每个item都可以设置android:maxLevel和android:minLevel,drawable的等级的方位是0-10000,默认是0。同样在item中,图片同样会被缩放,所以需要使用标签。

xml定义

<?xml version="1.0" encoding="utf-8"?><level-list    xmlns:android="http://schemas.android.com/apk/res/android" >    <item        android:drawable="@drawable/drawable_resource"        android:maxLevel="integer"        android:minLevel="integer" /></level-list>

示例

<?xml version="1.0" encoding="utf-8"?><level-list xmlns:android="http://schemas.android.com/apk/res/android">    <item android:maxLevel="1">        <bitmap            android:gravity="center"            android:src="@drawable/score_2" />    </item>    <item android:maxLevel="2">        <bitmap            android:gravity="center"            android:src="@drawable/score_2" />    </item>    <item android:maxLevel="3">        <bitmap            android:gravity="center"            android:src="@drawable/score_2" />    </item>    <item        android:maxLevel="9"        android:minLevel="4">        <bitmap            android:gravity="center"            android:src="@drawable/score_2" />    </item></level-list>
    public void setLevel(View view) {        EditText edittest = (EditText) findViewById(R.id.et_level);        String trim = edittest.getText().toString().trim();        int i = Integer.parseInt(trim);        ImageView imageview = (ImageView) findViewById(R.id.iv_level);        LevelListDrawable drawable = (LevelListDrawable) imageview.getDrawable();//        drawable.setLevel(i);        imageview.setImageLevel(i);    }

效果图:
levellistdrawable演示

TransitionDrawable

TransitionDrawable,对应于标签,用于实现两个drawable的淡入淡出。通过Drawable的startTransition和reverseTransition方法实现淡入淡出和其逆过程。

xml定义

<?xml version="1.0" encoding="utf-8"?><transitionxmlns: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>

具体示例

<?xml version="1.0" encoding="utf-8"?><transition xmlns:android="http://schemas.android.com/apk/res/android">    <item android:drawable="@drawable/d2" />    <item android:drawable="@drawable/d3" /></transition>
    /**     * TransitionDrawable 淡入淡出     *     * @param view     */    public void setTransition(View view) {        ImageView imageview = (ImageView) findViewById(R.id.iv_transition);        TransitionDrawable drawable = (TransitionDrawable) imageview.getDrawable();//        drawable.startTransition(1000);        drawable.reverseTransition(1000);    }

效果图:
transitiondrawable演示

InsetDrawable

InsetDrawable,对应标签,主要实现drawable的内嵌,并可以设置drawable的边距。

xml定义

<?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" />

具体实现

<?xml version="1.0" encoding="utf-8"?><inset xmlns:android="http://schemas.android.com/apk/res/android"    android:drawable="@drawable/d1"    android:insetBottom="40dp"    android:insetLeft="10dp"    android:insetRight="30dp"    android:insetTop="20dp" />

效果图:
InsetDrawable演示

ClipDrawable

ClipDrawable,对应于标签,它可以根据自己的Level来裁剪drawable,裁剪方向通过android:clipOrientation和android:gravity两个属性同时决定。drawable的level范围是0-10000,默认是0,表示完全裁剪,10000表示完全不裁剪。

xml定义

<?xml version="1.0" encoding="utf-8"?><clip    xmlns:android="http://schemas.android.com/apk/res/android"    android:drawable="@drawable/drawable_resource"    android:clipOrientation=["horizontal" | "vertical"]    android:gravity=["top" | "bottom" | "left" | "right" | "center_vertical" |                     "fill_vertical" | "center_horizontal" | "fill_horizontal" |                     "center" | "fill" | "clip_vertical" | "clip_horizontal"] />

ClipDrawable gravity属性详解

示例

<?xml version="1.0" encoding="utf-8"?><clip xmlns:android="http://schemas.android.com/apk/res/android"    android:drawable="@drawable/d4"    android:clipOrientation="horizontal"    android:gravity="left" />
    /**     * LevelListDrawable 设置等级     *     * @param view     */    public void setClip(View view) {        EditText edittest = (EditText) findViewById(R.id.et_level);        String trim = edittest.getText().toString().trim();        int i = Integer.parseInt(trim);        ImageView imageview = (ImageView) findViewById(R.id.iv_clip);        imageview.setImageLevel(i);    }

效果图:
ClipDrawable演示

ScaleDrawable

ScaleDrawable,对应标签,它可以根据自己的level讲指定的drawable缩放到一定的等级。

注意:
在ScaleDrawable中,drawable的level的等级会影响drawable的缩放。

  • level为0,drawable不可见
  • levle为10000(>10000),drawable完全显示,无法缩放
  • 一般情况下,在使用ScaleDrawable时,会将drawable的level设置成1,这样drawable的缩放就会按照android:scaleHeight和android:scaleWidth属性缩放。

xml定义

<?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" />

属性解释

  • android:scaleGravity:同shape的gravity
  • android:scaleHeight和android:scaleWidth:分别表示对指定drawable的高和宽的缩放,百分数。

具体示例

<?xml version="1.0" encoding="utf-8"?><scale xmlns:android="http://schemas.android.com/apk/res/android"    android:drawable="@drawable/d4"    android:scaleGravity="center_vertical|center_horizontal"    android:scaleHeight="40%"    android:scaleWidth="40%" />
<?xml version="1.0" encoding="utf-8"?><scale xmlns:android="http://schemas.android.com/apk/res/android"    android:drawable="@drawable/d4"    android:scaleGravity="center_vertical|center_horizontal"    android:scaleHeight="70%"    android:scaleWidth="70%" />
    /**     * ScaleDrawable 设置缩放1     *     * @param view     */    public void setScale1(View view) {        EditText mEtLevel = (EditText) findViewById(R.id.et_level);        String trim = mEtLevel.getText().toString().trim();        int i = Integer.parseInt(trim);        ImageView imageview = (ImageView) findViewById(R.id.iv_scale1);        ScaleDrawable drawable = (ScaleDrawable) imageview.getDrawable();        drawable.setLevel(i);    }    /**     * ScaleDrawable 设置缩放1     *     * @param view     */    public void setScale2(View view) {        EditText mEtLevel = (EditText) findViewById(R.id.et_level);        String trim = mEtLevel.getText().toString().trim();        int i = Integer.parseInt(trim);        ImageView imageview = (ImageView) findViewById(R.id.iv_scale2);        ScaleDrawable drawable = (ScaleDrawable) imageview.getDrawable();        drawable.setLevel(i);    }

效果图:
ScaleDrawable演示

StateListDrawable

StateListDrawable即选择器,对于这个大家都比较熟悉了,这里不做介绍

xml定义

<?xml version="1.0" encoding="utf-8"?><selector xmlns:android="http://schemas.android.com/apk/res/android"    android:constantSize=["true" | "false"]    android:dither=["true" | "false"]    android:variablePadding=["true" | "false"] >    <item        android:drawable="@[package:]drawable/drawable_resource"        android:state_pressed=["true" | "false"]        android:state_focused=["true" | "false"]        android:state_hovered=["true" | "false"]        android:state_selected=["true" | "false"]        android:state_checkable=["true" | "false"]        android:state_checked=["true" | "false"]        android:state_enabled=["true" | "false"]        android:state_activated=["true" | "false"]        android:state_window_focused=["true" | "false"] /></selector>

NinePatchDrawable

NinePatchDrawable即.9格式图片,在使用上和普通图片一样,在这里不做介绍。

xml定义

<?xml version="1.0" encoding="utf-8"?><nine-patch    xmlns:android="http://schemas.android.com/apk/res/android"    android:src="@[package:]drawable/drawable_resource"    android:dither=["true" | "false"] />
0 0
原创粉丝点击