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

 

时间: 2024-10-06 01:19:17

Android学习笔记之Drawable 文件夹的相关文章

Android学习笔记之mainfest文件中android属性

Android学习笔记之mainfest文件中android属性 - Impossible is nothing - 博客频道 - CSDN.NET 以前的零散笔记, 共享一下, 有错误的地方还请指正. android:allowTaskReparenting 是否允许activity更换从属的任务,比如从短信息任务 切换到浏览器任务.---------------------------------------------------------------------------------

Java学习笔记七(文件夹操作)

1.介绍 上一篇博客介绍的是java中常用的操作文件的方式,本篇博客着重讲解一下,在Java中是如何来操作文件夹的.主要是利用的是Java.IO包下面的File类,本篇博客着重讲解一下该类的构造函数和常用的方法. 2.File类的字段摘要 File类为我们提供了与系统有关的路径分割符,字段分别如下 static String pathSeparator:返回值为字符串,结果表示分号; static char pathSeparatorChar:返回值为char类型,结果表示分号 static c

Android图片适配,drawable文件夹,低分辨率图片是否必要

我们知道,Android提供了几种不同分辨率的bitmap,来对应不同手机屏幕的密度.对应关系如下: xxhdpi:3.0 xhdpi: 2.0 hdpi: 1.5 mdpi: 1.0 ldpi: 0.75 于是一个问题产生了: 从接触Android开发时就有了,既然Android能自动转换,为什么还要浪费用户空间去存储低分辨率的图片? 查了一些资料,终于在Google的开发者网站上找到了解答: Note: Low-density (ldpi) resources aren’t always n

(转)Android 之自定义控件样式在drawable文件夹下的XML实现

Android自定义控件样式在drawable文件夹下的XML中,在布局文件中通过设置控件的background属性达到效果. 一.控件常见状态: 在XML文件中用到了selector节点,selector可以理解为状态切换器,不同的状态下切换不同的样式,各种状态用Item节点表示,以下为一些常见的状态 (注意:statelist中第一个匹配当前状态的item会被使用.因此,如果第一个item没有任何状态特性的话,那么它将每次都被使用,这也是为什么默认的值必须总是在最后,各种状态可以交叉使用):

Android中项目中各个文件夹的含义和用途详解

1.src:存放所有的*.java源程序. 2.gen:为ADT插件自动生成的代码文件保存路径,里面的R.java将保存所有的资源ID. 3.assets:可以存放项目一些较大的资源文件,例如:图片.音乐.字体等. 4.res:可以存放项目中所有的资源文件,例如:图片(*.png.*.jpg).文本等. 5.res/drawable-hdpi:保存高分辨率图片资源,可以使用Resources.getDrawable(id)可以获得资源类型. 6.res/drawable-ldpi:保存低分辩率图

Android学习笔记(四三):文件访问

之前我们学习了通过preference和SQLite数据库进行数据存储,也可以通过文件方式.文件可以是在应用打包时预置,也可以是应用所生成. 文件访问有两种方式:一:静态数据的文件可以防止在res/raw中,这些文件是只读的,只有在应用版本升级的时候进行修改,或者我们先读出这些数据,通过 reference的方式来处理,这样以后可以进行修订,但是这种方式,会有两份数据保存.二:另一种方式是通过URL访问文件,动态数据的读取也可以采用SQLite3的方式. res/raw/下静态文件的读取 在re

android学习笔记36——使用原始XML文件

XML文件 android中使用XML文件,需要开发者手动创建res/xml文件夹. 实例如下: book.xml==> <?xml version="1.0" encoding="utf-8"?> <books> <book publishDate="2016.05.05" price="88.6">android学习笔记</book> <book publishD

android学习笔记--android启动过程之init.rc文件浅析

1.  init.rc文件结构文件位置:init.c  : /system/core/initinit.rc  : /system/core/rootdir 首先init.rc文件是以模块为单位的,每个模块里的内容都是一起执行的,模块分为3种类型:on.service.import.我们可以看下init.rc文件是怎么写的:1.import import /init.usb.rc import /init.${ro.hardware}.rc import /init.trace.rc 上面的内容

关于Android中图片大小、内存占用与drawable文件夹关系的研究与分析

从上一篇文章<Android屏幕适配全攻略>写完之后,经常会有朋友问我这个问题:"能不能一个App只提供一套切图适应所有的分辨率呢?"我觉得有必要写一篇文章来研究一下这个问题,所以就有了这篇文章. 研究内容 研究方法 测试环境 研究过程 结果分析 结论 另外一个难以解释的问题 研究内容 本篇内容主要探讨以下场景:同一张图片,放置在不同的drawable文件夹,在同一设备上运行,对图片大小及内存占用有什么影响. 研究方法 控制变量法 分析法 测试环境 采用锤子T1手机(108