Android 中 Drawable 文件夹内部相关属性(转)

Android项目的项目结构我们算是再熟悉不过了..但是仅仅知道有什么结构远远是不够的,能够熟练的去运用其中的内部属性才是重要的..项目结构就不得不说一下Drawable文件中的相关属性了..言归正传..首先说一下anim..
1.anim.xml

anim.xml..通过这个xml文件,我们可以定义一些动画效果..然后通过引用我们就可以为一个View设置一个动画效果了..我们来看一下内部属性以及结构..

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <translate/>
    <alpha/>
    <scale/>
    <rotate/>
</set>

这是anim的内部结构..内部包含着四个标签..各个标签有各个标签的作用..我们来看一下这几个标签的作用..

首先是alpha属性..

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"> 
    <!--透明度动画设置
      fromAlpha:表示初始的透明度
      toAlpha:表示效果结束的最终透明度、
      duration:表示动画的持续时间-->
    <!--淡入效果-->
    <alpha 
    android:fromAlpha="0.0"
    android:toAlpha="1.0"
    android:duration="300"/>
</set>

alpha主要的目的是实现一个View视图的淡入淡出效果..

接着来看translate属性..

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <!-- 位移动画的使用 
           fromXDelta:初始从X的什么位置进行移动
           fromYDelta:初始从Y的什么位置进行移动
    -->
    <translate 
        android:fromXDelta="0"
        android:toXDelta="0"
        android:fromYDelta="100%"
        android:toYDelta="0%"
        android:duration="300"/>
</set>

这里不得不说的一个知识点就是,toYDelta="0%"..这是一个百分值..


这个100%的由来是根据上面这张图片来的..我们可以看到Android的手机屏幕..手机屏幕的左上角是坐标的(0,0)..最右下角是手机屏幕的最大坐标..我们的手机屏幕大小是按照(设备独立像素,其实就是dp)进行分割的..这里把手机屏幕按照百分比进行分割..也非常的好理解..上面的位移动画表示X的位置是不动的..即X方向上不发生任何的平移效果..竖直方向View从最底部平移到最上部..这样就可以完成一个View竖直方向上的平移动画效果..总体理解起来还是非常的简单的..

** scale缩放动画效果**

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <!--缩放动画效果
          fromXScale:这个from表示的是图片的大小
          0.0表示不显示数据..1.0表示放大至原图大小..
          pivox:表示动画的位置..也是按照屏幕的百分比来看的
          interpolator:表示加速器..当前动画的播放速度-->
    <scale 
        android:fromXScale="1"
        android:toXScale="1.0"
        android:fromYScale="0"
        android:toYScale="1.0"
        android:pivotX="100%"
        android:pivotY="0%"
        android:interpolator="@android:anim/decelerate_interpolator"
        android:duration="300"/>
    
</set>

在这个缩放动画中放入了一个加速器..加速器在哪个动画中都可以使用..目的是控制当前的动画效果以怎样的速度来完成这个动画效果..加速器的属性有很多..在这里列举一下...

android:interpolator="@android:anim/accelerate_interpolator"          越来越快
android:interpolator="@android:anim/decelerate_interpolator"          越来越慢
android:interpolator="@android:anim/accelerate_decelerate_interpolator"   先快后慢
android:interpolator="@android:anim/anticipate_interpolator"          先后退一小步然后向前加速
android:interpolator="@android:anim/overshoot_interpolator"          快速到达终点超出一小步然后回到终点
android:interpolator="@android:anim/anticipate_overshoot_interpolator"    到达终点超出一小步然后回到终点
android:interpolator="@android:anim/bounce_interpolator"            到达终点产生弹球效果,弹几下回到终点
android:interpolator="@android:anim/linear_interpolator"            均匀速度

上面这些属性是加速器的所有属性..相关的效果大家可以自己去试试...

** rotate旋转动画效果**

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
  <!--旋转动画效果
        fromDegrees:旋转的角度
        toDegrees:需要到达的角度  
  -->
 <rotate   
  android:interpolator="@android:anim/accelerate_decelerate_interpolator"
  android:fromDegrees="300" 
  android:toDegrees="-360"   
  android:pivotX="10%"         
  android:pivotY="100%"      
  android:duration="1000" />
</set>

旋转动画的实现其实和上面几种也都差不多..这里只是单一的在一个set标签中设置一个效果,一个set标签内部可以放入多种效果..从而实现多重动画的组合..使得动画展示的更加的完美...

2.style.xml

style用于定义统一样式...如果一个layout内部多个控件的布局样式是一样的,那么我们就没有必要一个个的去书写相关布局..只需要定义一个统一的样式..然后这多个View去引用这个style样式其实就可以了..可以免去很多的重复代码的书写..因此style就变得非常的重要了...

<style>标签的基本结构:

style 标签内部属性不仅可以添加基本属性,而且还可以添加drawable,anim的xml文件的属性数据..

<style name="layout_style">
   <item name="android:layout_height">30dp</item>
   <item name="android:layout_width">0dp</item>
   <item name="android:layout_weight">1</item>
   <item name="android:textSize">15sp</item>
   <item name="android:backgrond">@drawable/layout_style</item>
   <item name="android:windowEnterAnimation">@anim/pop_enter</item>
   <item name="android:windowExitAnimation">@anim/pop_exit</item>
 </style>

style属性如同网页中的css样式一样..只不过没有css那样那么的复杂..定义了统一样式之后我们就可以去引用了...引用的形式也非常的简单..只需要通过style属性去引用相关的style.xml文件就可以了...

 <Button 
   android:id="@+id/constact_all
   style="@style/top_all"
   android:text="@string/all"/>

3.selector标签...

我们在为一个View定义基本样式的时候是通过布局文件来实现的..有时候控件的基本样式我们定义好了..还有一些其他样式是我们需要使用@drawable属性来完成的..比如说background属性,src等属性我们是需要通过调用drawable中对应的xml文件来完成的...

这就涉及到了selector标签的使用...selector用于设置一个控件或者是一个View中一些属性...拿一个按钮来说吧..一个按钮按下的时候需要定义一种样式..没有按下的时候需要另一种样式..这样的目的是为了给用户一种良好的反馈..这样就需要使用到drawable文件夹中的xml文件中的selector标签了..这就是selector的应用..

表示一个图片是否响应点击事件..点击后需要显示的效果..以及不被点击时需要显示的效果..还有是否响应触发事件对应的相应效果..

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
    <item android:state_enabled="false" android:drawable="@drawable/skin_tab_icon_contact_selected"></item>
    <item android:state_pressed="true" android:drawable="@drawable/skin_tab_icon_contact_selected"></item>
    <item android:drawable="@drawable/skin_tab_icon_contact_normal"></item>
</selector>

相关属性还有很多...在这里简单的列举一下..并且这些相关属性是可以进行叠加的..从而处理多个事件的集合...

android:state_pressed           如果是true,当被点击时显示该图片,如果是false没被按下时显示默认。

android:state_focused           如果是true,获得焦点时显示;如果是false没获得焦点显示默认。

android:state_selected          如果是true,当被选择时显示该图片;是false未被选择时显示该图片。

android:state_checkable         如果值为true,当CheckBox能使用时显示该图片;false,当CheckBox不能使用时显示该图片。

android:state_checked           如果值为true,当CheckBox选中时显示该图片;false,当CheckBox为选中时显示该图片。

android:state_enabled           如果值为true,当该组件能使用时显示该图片;false,当该组件不能使用时显示该图片。
 
android:state_window_focused    如果值为true,当此activity获得焦点在最前面时显示该图片;false,当没在最前面时显示该图片。

selector这里的属性中的drawable属性一方面可以去使用我们放置在内部的图片..另一种方式就是还可以去自定义图形去显示...这样通过了自定义图形的方式来设置drawable属性...

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
    <item android:state_enabled="false">
        <shape >
            <corners android:topLeftRadius="0dp" android:topRightRadius="5dp" android:bottomLeftRadius="0dp" android:bottomRightRadius="5dp"/>
            <solid android:color="#499BF7"/>
            <stroke android:width="1dp" android:color="#499BF7"/>
        </shape>
    </item>
    
    <item android:state_pressed="true">
        <shape >
            <corners android:topLeftRadius="0dp" android:topRightRadius="5dp" android:bottomLeftRadius="0dp" android:bottomRightRadius="5dp"/>
            <solid android:color="#499BF7"/>
            <stroke android:width="1dp" android:color="#499BF7"/>
        </shape>
    </item>
    
    <item >
        <shape >
            <corners android:topLeftRadius="0dp" android:topRightRadius="5dp" android:bottomLeftRadius="0dp" android:bottomRightRadius="5dp"/>
            <solid android:color="#FFFFFF"/>
            <stroke android:width="1dp" android:color="#499BF7"/>
        </shape>
    </item>
</selector>

同样shape标签也可以进行单独的使用..直接为drawable属性设置shape属性也是可以的..如同这样...

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" >
    <corners android:radius="5dp"/>
    <solid android:color="#FFFFFF"/>
    <stroke android:width="1dp" android:color="#499BF7"/>

</shape>

drawable文件内部看着非常的简单,但是使用的非常灵活,熟练还是没那么容易的...因此掌握其中内部的技巧..熟练的去运用..这样在开发当中可以省去很多的事情..

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,242评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,769评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,484评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,133评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,007评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,080评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,496评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,190评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,464评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,549评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,330评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,205评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,567评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,889评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,160评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,475评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,650评论 2 335

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,049评论 25 707
  • 1 背景 不能只分析源码呀,分析的同时也要整理归纳基础知识,刚好有人微博私信让全面说说Android的动画,所以今...
    未聞椛洺阅读 2,651评论 0 10
  • 时间的沙漏计总是偏爱忙碌和紧张,转眼又到周一前夜。回味过去的两天假期,因是连续7日上班后的周末愈加弥足珍贵。...
    禾呈女青阅读 305评论 1 0
  • 文字是一种非常美妙的情感表达载体。 我想我是从初中开始喜欢上文字的吧?那时候作文写得好,深得语文老师的喜欢,下课后...
    飞翔的比目鱼阅读 545评论 3 2
  • 浸淫在这物欲横流、喧嚣繁华的社会中,你是否曾想过拥有一刻属于自己的宁静? 面对永远自动膨胀的工作,充满琐碎与无奈的...
    黑白大熊猫阅读 202评论 1 5