zoukankan      html  css  js  c++  java
  • Android学习笔记之Drawable 文件夹

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

     

  • 相关阅读:
    HTB-靶机-Charon
    第一篇Active Directory疑难解答概述(1)
    Outlook Web App 客户端超时设置
    【Troubleshooting Case】Exchange Server 组件状态应用排错?
    【Troubleshooting Case】Unable to delete Exchange database?
    Exchange Server 2007的即将生命周期,您的计划是?
    "the hypervisor is not running" 故障
    Exchange 2016 体系结构
    USB PE
    10 months then free? 10个月,然后自由
  • 原文地址:https://www.cnblogs.com/RGogoing/p/5004830.html
Copyright © 2011-2022 走看看