Android资源使用详解(二)

来源:互联网 发布:ue软件 编辑:程序博客网 时间:2024/05/01 08:48
      Drawable资源通常保存在/res/drawable目录,可分为图片资源(*.png、*.jpg、*.gif等格式)、XML资源等,Android SDK会在编译应用中自动加载该图片资源,并在R资源清单类中生成该资源的索引。使用方法如下:
    Java代码中:[<package_name>.]R.drawable.<file_name>
    xml代码中:[<package_name>.]@drawable/<file_name>
为了在程序中获得实际的Drawable对象,Resources提供了Drawable getDrawable(int id)方法来获得实际的Drawable对象。
1.StateListDrawable资源
    StateListDrawable用于组织多个Drawable对象。当使用StateListDrawable作为目标组件的背景、前景图片时,StateListDrawable对象所显示的Drawable对象会随目标组件状态的改变自动切换。定义StateListDrawable对象的XML文件的根元素为<selector../>,
该元素可以包含多个<item../>子元素,该元素可指定如下属性:
   >android:color或android:drawable:指定颜色或Drawable对象;
   >android:state_xxx:指定一个特定状态;

实例:http://blog.csdn.net/u012637501/article/details/46529865


2.LayerDrawable资源

    与StateListDrawable有点类似,LayerDrawabe也可以包含一个Drawable数组,因此系统将会按这些Drawable对象的数组顺序来绘制它们,索引最大的Drawable对象将会被绘制在最上面。定义LayerDrawable对象的XML文件的根元素为<layer-list.../>,该元素可以包含多个<item.../>元素,该元素可指定如下属性:
    >android:drawable:指定作为LayerDrawable元素之一的Drawable对象;
    >android:id:为该Drawable对象指定一个标识;
    >android:butom/top/left/Right:用于指定一个长度值指定将该Drawable对象绘制到目标组件的指定位置.
语法格式如下:
<?xml version="1.0" encoding="utf-8"?>
<layer-list  xmlns:android="http://schemas.android.com/apk/res/android">
    <!-- 指定一个Drawable元素 -->
    <item 
            android:id="@android:id/background"
            android:drawable="@drawable/grow"/>
</layer-list>

源码实战:自定义进度条的风格
(1)res/drawable/mybar.xml
功能:进度条外观风格
<?xml version="1.0" encoding="utf-8"?><layer-list xmlns:android="http://schemas.android.com/apk/res/android" >    <!-- 指定一个Drawable元素,用于定义进度条轨道背景 -->    <item         android:id="@android:id/background"        android:drawable="@drawable/image02"/><!-- 指定一个Drawable元素,用于定义轨道上已完成部分的外观--><item     android:id="@android:id/progress"    android:drawable="@drawable/image01"/></layer-list>
注意:@android:id/background和@android:id/progress标明Drawable元素的ID,是Android系统自带的,均有各自的功能,用户不能自行定义i。
(2)res/drawable/layout_logo/xml
功能:图片叠加效果
<?xml version="1.0" encoding="utf-8"?><layer-list xmlns:android="http://schemas.android.com/apk/res/android" >    <item>        <bitmap            android:gravity="center"            android:src="@drawable/image03" />    </item>    <item        android:left="25dp"        android:top="25dp">        <bitmap            android:gravity="center"            android:src="@drawable/image01" />    </item>    <item        android:left="50dp"        android:top="50dp">        <bitmap            android:gravity="center"            android:src="@drawable/image02" />    </item></layer-list>
(3)MainActivity.java
功能:通过子线程模拟进度条进度
package com.example.layerdrawabletest;import android.app.Activity;import android.os.Bundle;import android.os.Handler;import android.widget.ProgressBar;public class MainActivity extends Activity {  private int[] data = new int[100];    int hasData = 0;    int status = 0;    ProgressBar bar;    // 创建一个负责更新的进度的Handler    Handler handler = new Handler() {     public void handleMessage(android.os.Message msg) {      if (msg.what == 0x111) {       bar.setProgress(status);      }     };    };    @Override    protected void onCreate(Bundle savedInstanceState) {     super.onCreate(savedInstanceState);     setContentView(R.layout.main);     bar = (ProgressBar) findViewById(R.id.progressBar);     // 启动线程来执行任务     new Thread(new Runnable() {      public void run() {       while (status < 100) {        status = doWork(); // 获取耗操作的完成百分比        handler.sendEmptyMessage(0x111); // 发送消息       }      }     }).start();    }    // 模拟一个耗时任务    public int doWork() {     data[hasData++] = (int) (Math.random() * 100);     try {      Thread.sleep(100);     } catch (InterruptedException e) {      e.printStackTrace();     }     return hasData;    }  }
(4)效果演示


3.ShapeDrawable资源
    ShapeDrawable用于定义一个基本的几何图形(如矩形、圆形、线条等),定义ShapeDrawable的XML文件的根元素是<shape.../>元素,该元素可指定如下属性:
   >android:shape=["rectangle"|"oval"|"line"|"ring"]:指定定义哪种类型的几何图形
另外,<shape../>元素下可以包含多个子元素,如<corners../>、<gradient.../>等
    定义ShapeDrawable对象的完整语法格式如下:
  1. <? xml version="1.0" encoding="utf-8"?>  
  2. <shape xmlns:android="http://schemas.android.com/apk/res/android"  
  3.          android:shape=["rectangle"|"oval"|"line"|"ring"]>  
  4. <!-- 定义几何图形的四个角的弧度 -->   
  5. <corners  
  6.         android:radius="integer"  
  7.         android:topLeftRadius="integer"  
  8.         android:topRightRadius="integer"  
  9.         android:bottomLeftRadius="integer"  
  10.         android:bottomRightRadius="integer"/>  
  11. <!-- 定义使用渐变色填充 -->   
  12. <gradient  
  13.         android:angle="integer"  
  14.         android:centerX="integer"  
  15.         android:centerY="integer"  
  16.         android:centerColor="integer"  
  17.         android:endColor="color"              
  18.         android:gradientRadius="integer"  
  19.         android:startColor="color"  
  20.         android:type=["linear"|"radial"|"sweep"]  
  21.         android:usesLevel=["true"|"false"]/>  
  22.   <!-- 定义几何形状的内边框 -->   
  23. <padding  
  24.         android:left="integer"  
  25.         android:top="integer"  
  26.         android:right="integer"  
  27.         android:bottom="integer"/>  
  28. <!-- 定义几何形状的大小 -->   
  29. <corners  
  30.         android:width="integer"  
  31.         android:color="color"  
  32.         android:dashWidth="integer"  
  33.         android:dashGap="integer"/>  
  34.    <!-- 定义使用单种颜色填充 -->   
  35. <solid  
  36.     android:color="color"/>  
  37. <!-- 定义几何形状绘制边框 -->   
  38. <stroke  
  39.     android:width="integer"  
  40.     android:color="color"  
  41.     android:dashWidth="integer"  
  42.     android:dashGap="integer"/>  
  43. </shape>  

实例:http://blog.csdn.net/u012637501/article/details/46529865


4.ClipDrawable资源

    ClipDrawable代表从其他位图上截取的一个"图片片段"。在XML文件中定义ClipDrawable对象使用<clip../>元素,该元素具有以下属性:
    >android:drawable:指定截取的源Drawable对象
    >android:clipOrientation:指定截取方向,可设置水平截取或垂直截取
    >android:gravity:指定截取时的对齐方式
该元素的语法为:
  1. <? xml version="1.0" encoding="utf-8"?>  
  2. <clip xmlns:android="http://schemas.android.com/apk/res/android"  
  3.         android:drawable="@drawable/drawable_resource"  
  4.         android:clipOritentation=["horizontal"|"vertical"]  
  5.         android:gravity=["top"|....]> 
注:使用ClipDrawable对象对可调用setLevel(int level)方法来设置截取的区域大小,当level为0时,截取的图片片段为空;当level为10000时,截取整张图片。

5.AnimationDrawable资源(/res/anmi)


    AnimationDrawable代表一个动画,Android支持传统的逐帧动画(类似于电影方式,即一张图片一张图片地切换)和补间动画(通过平移、变化计算得到)。
(1)定义补间动画的思路是
    置一张图片的开始状态(包括透明度、位置、缩放比、旋转度),然后,设置该图片的结束状态(包括透明度、位置、缩放比、旋转度),在设置动画的持续时间,Android系统会使用动画效果把这张图片从开始状态变换到结束状态。在XML资源文件中以<set../>元素作为根元素,该元素的属性有:
    >android:interpolator="@anim/interpolator_resource" 作用:指定指定动画的变化速度
    >android:shareInterpolator=["true"|"false"]    作用:指定<set../>元素下所有的变换效果使用相同的动画速度
    >android:duration="integer(持续的时间)"       作用:设置动画的持续时间
根元素包含如下4个子元素:
    ◇<alpha.../>:设置透明度的改变  
    ◇<scale.../>:设置图片进行缩放改变
    ◇<translate.../>:设置图片进行位移变换
    ◇ <rotate.../>:设置图片进行旋转
注:除<set.../>根元素外,<alpha.../>、<scale.../>等子元素都可以指定一个android:interpolator属性,通过该属性可以指定动画的变化速度,如匀速、正加速、负加速、无规则变速等,Android系统的R.anim类就包含大量的常量来定义这些速度,如linear_interpolator(匀速变换)、accelerate_interpolator(加速变换)、decelerate_interpolator(减速变换)。
(2)设置补间动画的语法格式
  1. <? xml version="1.0" encoding="utf-8"?>  
  2. <set xmlns:android="http://schemas.android.com/apk/res/android"  
  3.         android:interpolator="@anim/interpolator_resource"  
  4.         android:shareInterpolator=["true"|"false"]  
  5.         android:duration="integer(持续的时间)">  
  6.         <!--设置透明度的改变-->  
  7.         <alpha  
  8.                 android:fromAlpha="float"  
  9.                 android:toAlpha="float"/>  
  10.         <!--设置图片进行缩放改变-->  
  11.         <scale  
  12.                 android:fromXScale="float"  
  13.                 android:toXScale="float"  
  14.                 android:fromYScale="float"  
  15.                 andrroid:toYScale="float"  
  16.                 android:pivotX="float"  
  17.                 android:pivotY="float"/>  
  18.         <!--设置图片进行位移改变-->  
  19.         <translate  
  20.                 android:fromXDelta="float"  
  21.                 android:toXDelta="float"  
  22.                 android:fromYDelta="float"  
  23.                 android:toYDelta="float"/>       
  24.       <!--设置图片进行旋转改变-->  
  25.         <rotate  
  26.                 android:fromDegress="float"  
  27.                 android:toDegress="float"  
  28.                 android:pivotX="float"  
  29.                 android:pivotY="float"/>  
  30. </set> 
注释:上面语法格式中包含了大量的fromXxx,toXxxx属性,用于定义图片的开始状态和结束状态。另外,当进行缩放变换(scale)、旋转(rotate)变换时,还需要指定pivotX、pivotY两个属性,用于指定变换的"中心点"("旋转轴")。
源码实战:自定义Activity切换风格
(1)res/values/activityTheme.xml
功能:自定义Activity窗口显示风格,并通过android:windowAnimationStyle属性设置Activity进入与退出的切换风格,其中@anim/zoom_enter和@anim/zoom_exit分别代表的是进入动画和退出动画。
<resources xmlns:android="http://schemas.android.com/apk/res/android">    <style name="mTheme"  parent="android:style/Theme.NoTitleBar">         <item name="android:windowNoTitle">true</item>         <item name="android:windowFullscreen">false</item>         <item name="android:windowIsTranslucent">true</item>         <item name="android:windowAnimationStyle">@style/activity_bottom_in_top_out</item>         <item name="android:windowSoftInputMode">stateHidden</item>    </style>        <style name="activity_bottom_in_top_out" parent="@android:style/Animation.Translucent">              <item name="android:windowEnterAnimation">@anim/zoom_enter</item>              <item name="android:windowExitAnimation">@anim/zoom_exit</item>    </style></resources>
(2)res/anim/zoom_enter.xml
功能:Activity进入动画效果
<?xml version="1.0" encoding="utf-8"?><set xmlns:android="http://schemas.android.com/apk/res/android"    android:interpolator="@android:anim/decelerate_interpolator" >    <scale        android:duration="@android:integer/config_mediumAnimTime"        android:fromXScale="2.0"        android:fromYScale="2.0"        android:pivotX="50%p"        android:pivotY="50%p"        android:toXScale="1.0"        android:toYScale="1.0" /></set>
(3)res/anim/zoom_exit.xml
功能:Activity退出动画效果
<?xml version="1.0" encoding="utf-8"?><set xmlns:android="http://schemas.android.com/apk/res/android" >    <translate        android:duration="1000"        android:fromYDelta="0"        android:toYDelta="100%" />    <alpha        android:duration="1000"        android:fromAlpha="1.0"        android:toAlpha="0.0" /></set>
(4)AndroidManifest.xml
功能:在清单文件中通过Android:theme属性指定应用或单个Activity的主题,即应用切换效果。
<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android"    package="suntektech.project.spq"    android:versionCode="1"    android:versionName="1.0" >    <!-- 添加写sd卡的权限 --><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />    <!-- 添加访问网络权限 -->    <uses-permission android:name="android.permission.INTERNET"/>    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />    <uses-sdk        android:minSdkVersion="8"        android:targetSdkVersion="21" />    <!-- 设置应用支持的设备尺寸 --><supports-screens     android:smallScreens="false"    android:normalScreens="true"    android:largeScreens="true"    android:xlargeScreens="false"/>    <!-- android:screenOrientation="portrait"禁止横屏 -->    <application        android:allowBackup="true"        android:icon="@drawable/icon"       android:theme="@style/mTheme"        android:label="@string/app_name">        <activity            android:name="suntektech.project.spq.WelcomeActivity"            android:label="@string/app_name"             android:screenOrientation="portrait">            <intent-filter>                <action android:name="android.intent.action.MAIN" />                <category android:name="android.intent.category.LAUNCHER" />            </intent-filter>        </activity>    </application></manifest>
(5)效果演示



0 0
原创粉丝点击