• 热门专题

Android学习笔记之Drawable 文件夹

作者:Darker  发布日期:2015-11-30 20:34:54
Tag标签:文件夹  笔记  
  • PS:最近闲着无聊..模仿去写个QQapp..效果还不错..并且从中又学习到了一些相关的东西,在这里进行一些相关总结..

    学习内容:

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

     

About IT165 - 广告服务 - 隐私声明 - 版权申明 - 免责条款 - 网站地图 - 网友投稿 - 联系方式
本站内容来自于互联网,仅供用于网络技术学习,学习中请遵循相关法律法规