zoukankan      html  css  js  c++  java
  • 《android开发艺术探索》读书笔记(六)--Drawable

    接上篇《android开发艺术探索》读书笔记(五)--RemoteViews

    【BitmapDrawable】

    简单的图片

    <!xml version="1.0" encoding="utf-8"?>
    <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"]        --纹理映射,默认false,不常用
        android:tileMode=["disabled"|"clamp"|"repeat"|"mirror"]/>    --平铺模式,repeat普通平铺,mirror镜面投影,clamp周围扩散

    【NinePatchDrawable】

    .9图

    <!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"]/>

    【ShapeDrawable】

    通过颜色来构造的图形,即<shape>标签,百度一搜一堆,这里就不写了

    【LayerDrawable】

    对应XML标签是<layer-list>,表示一种层次化的Drawable集合,通过将不同的Drawable放置在不同的层上面从而达到一种叠加后的效果

    一个layer-list中可以包含多个item,每个item表示一个Drawable

    <!xml version="1.0" encoding="utf-8"?>
    <layer-list xmlns:android="http://schemas.android.com/apk/res/android">
        <item>
            <shape android:shape="rectangle">
                <solid android:color="#0ac39e"/>
            </shape>
        </item>
        <item android:bottom="6dp">
            <shape android:shape="rectangle">
                <solid android:color="#ffffff"/>
            </shape>
        </item>
        <item
            android:bottom="1dp"
            android:left="1dp"
            android:right="1dp">
            <shape android:shape="rectangle">
                <solid android:color="#ffffff"/>
            </shape>
        </item>
    </layer-list>

    【StateListDrawable】 

    对应<selector>标签,百度一搜一堆,这里就不讲了

    【LevelListDrawable】

    对应于<level-list>标签,同样表示一个Drawable集合,集合中的每个Drawable都有一个等级level的概念,根据不同等级,会切换为对应的Drawable

    每个item表示一个Drawable,并有等级范围,由minLevel和maxLevel来指定,在最小值和最大值之间的等级会对应此item中的Drawable,通过Drawable的setLevel方法来设置背景图片setImageLevel方法来设置前景图片,等级范围0~10000

    <!xml version="1.0" encoding="utf-8"?>
    <level-list xmlns:android="http://schemas.android.com/apk/res/android">
        <item 
            android:drawable="@drawable/status_off"
            android:maxLevel="0"/>
        <item
            android:drawable="@drawable/status_on"
            android:maxLevel="1"/>
    </levle-list>

    【TransitionDrawable】

    对应于<transition>标签,用于实现两个Drawable之间的淡入淡出效果

    <!xml version="1.0" encoding="utf-8"?>
    <transition xmlns:android="http://schema.android.com/apk/res/android">
        <item android:drawable="@drawable/drawable1"/>
        <item android:drawable="@drawable/drawable2"/>
    </transition> 
    <TextView
        android:id="@+id/button"
        android:layout_height="wrap_content"
        android:layout_width="wrap_content"
        android:background="@drawable/transition_drawable"/>

     通过startTransitionreverseTransition方法来实现淡入淡出效果

    TextView textView = (TextView)findViewById(R.id.test_transition);
    TransitionDrawable drawable = (TransitionDrawable)textView.getBackground();
    drawable.startTransiton(1000);

    【InsetDrawable】

    对应于<inset>标签,可以将其他Drawable内嵌到自己当中,并可以在四周留出一定的间距(类似于padding或margin效果)

    <!xml version="1.0" encoding="utf-8"?>
    <inset xmlns:android="http://schemas.android.com/apk/res/android"
        android:insetBottom="15dp"
        android:insetLeft="15dp"
        android:insetRight="15dp"
        android:insetTop="15dp">
        <shape android:shape="rectangle">
            <solid android:color="#ff0000"/>
        </shape>
    </inset>

    【ScaleDrawable】

    对应于<scale>标签,根据自己的等级(level)将指定的Drawable缩放到一定比例

    例:缩小为原大小的30%

    <!xml version="1.0" encoding="utf-8"?>
    <scale xmlns:android="http://schemas.android.com/apk/res/android"
        android:drawable="@drawable/image1"
        android:scaleHeight="70%"
        android:scaleWidth="70%"
        android:scaleGravity="center"/>
    View testScale = findViewById(R.id.test_scale);
    ScaleDrawable testScaleDrawable = (ScaleDrawable)testScale.getBackground();
    testScaleDrawable.setLevel(1);

     等级范围0~10000,必须设置为大于0

    【ClipDrawable】

    对应于<clip>标签,可以根据当前的等级level来剪裁另一个Drawable,剪裁方向可以通过clipOrientation(裁剪方向)和gravity两个属性共同控制

    例:从上往下裁剪20%

    <!xml version="1.0" encoding="utf-8"?>
    <clip xmlns:android="http://schemas.android.com/apk/res/android"
        android:clipOrientation="vertical"
        android:drawable="@drawable/image1"
        android:gravity="bottom"/>
    <ImageView
        android:id="@+id/test_clip"
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:src="@drawable/clip_drawable"
        android:gravity="center"/>
    ImageView testClip = (ImageView)findViewById(R.id.test_clip);
    ClipDrawable testClipDrawable = (ClipDrawable)testClip.getDrawable();
    testClipDrawable.setLevle(8000);

     等级level的范围0~10000,0表示完全裁剪,10000表示不裁剪

    【自定义Drawable】

    重写draw方法

    当自定义Drawable有固定大小时最好重写getIntrinsicWidthgetIntrinsicHeight方法

  • 相关阅读:
    CentOS7.5右键创建空白文档
    CentOS7.5安装配置conky(极简)
    CentOS7.5安装nodejs
    CentOS7.5安装网易云音乐
    CentOS7.5删除旧的内核
    CentOS7.5安装notepadqq
    CentOS7英文环境下使用中文输入法
    CentOS7安装Pycharm后无法使用日常的快捷键
    tomcat的work目录作用
    ORACLE获取某个时间段之间的月份列表
  • 原文地址:https://www.cnblogs.com/anni-qianqian/p/8269005.html
Copyright © 2011-2022 走看看