Android资源使用详解(二)

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)效果演示

时间: 2024-11-08 23:00:29

Android资源使用详解(二)的相关文章

Android Widget 开发详解(二)

转载请标明出处:http://blog.csdn.net/sk719887916/article/details/47027263 不少开发项目中都会有widget功能,别小瞧了它,他也是android的七大组件之一,对widget陌生的朋友可以阅读下我的上篇文章< Android Widget工作原理详解(一)> 今天我们就实现一个可以滑动的widet,熟悉下一个普通widget的开发. 一 创建AppWidgetProvider 此类是widget的控制核心,主要控制添加,删除,更新等.他

Android WebView 开发详解(二)

转载请注明出处  http://blog.csdn.net/typename/article/details/39495409 powered by meichal zhao 概览: Android WebView 做为承载网页的载体控件,他在网页显示的过程中会产生一些事件,并回调给我们的应用程序,以便我们在网页加载过程中做应用程序想处理的事情.比如说客户端需要显示网页加载的进度.网页加载发生错误等等事件. WebView提供两个事件回调类给应用层,分别为WebViewClient,WebChr

Android资源使用详解(一)

一.Android资源简介 Android应用资源可分为两大类:(1)无法通过R清单类访问的原生资源,保存在assets目录下;(2)可通过R资源清单类访问的资源,保存在res目录下.其中,res目录下应用资源介绍如下: 目录Directory 资源类型Resource Types res/anim/ XML文件,它们被编译进逐帧动画(frame by frame animation)或补间动画(tweened animation)对象 res/drawable/ .png..9.png..jp

Android对话框使用详解(二)

博客地址:http://blog.csdn.net/u012637501/article/details/46003413 一.使用PopupWindow创建对话框风格的窗口 使用PopupWindow创建对话框风格的窗口步骤如下: >调用PopupWindow的构造器创建PopupWindow对象; >调用PopupWindow的showAsDropDown(View v)将PopupWindow作为v组件的下拉组件显示出来:或调用PopupWindow的showAtLocation()方法

Android清单文件详解(二) ---- 应用程序权限声明

我们知道,Android系统的各个模块提供了非常强大的功能(比如电话,电源和设置等),通过使用这些功能,应用程序可以表现的更强大,更灵活.不过,使用这些功能并不是无条件的,而是需要拥有一些权限.接下来,我们就开始讲解另一个非常重要的知识点--应用程序权限声明,其中主要包括应用程序的权限声明,自定义应用程序的访问权限和SDK版本限定. 1.<uses-permission>--应用程序的权限申请 权限 描述 android.permission.ACCESS_NETWORK_STATE 允许应用

Android中Intent详解(二)之使用Intent广播事件及Broadcast Receiver简介

通过第一篇的讲解,我们已经看到了如何使用Intent来启动新的应用程序组件,但是实际上他们也可以使用sendBroadcast方法来在组件间匿名的广播消息. 作为一个系统级别的消息传递机制,Intent可以在进程之间发送结构化的消息.因此,通过实现Broadcast Receiver来监听和响应应用程序内的这些Broadcast Intent. 通过使用Intent来广播一个事件,可以在不修改原始的应用程序的情况下,让我们开发人员对事件做出反应.Android大量使用了Broadcast Rec

全志Android SDK编译详解(二)

注意要确定安装了jdk) 第一步: cd  lichee; ./build.sh  -p sun5i_elite -k 3.0  (apt-get install uboot-mkimage需要安装mkimage工具) 1)打开build.sh脚本发现脚本中只有“buildroot/scripts/common.sh [email protected]”此一句话;其中[email protected]接受所有输入参数 2)继续打开 (vim) buildroot/scripts/common.s

Android Animation动画详解(二): 组合动画特效

前言 上一篇博客Android Animation动画详解(一): 补间动画 我已经为大家介绍了Android补间动画的四种形式,相信读过该博客的兄弟们一起都了解了.如果你还不了解,那点链接过去研读一番,然后再过来跟着我一起学习如何把简单的动画效果组合在一起,做出比较酷炫的动画特效吧. 一. 动画的续播 如题,大家想想,如果一个页面上包含了许多动画,这些动画要求按顺序播放,即一个动画播放完成后,继续播放另一个动画,使得这些动画具有连贯性.那该如何实现呢? 有开发经验或者是逻辑思维的人肯定会想,对

Android进阶——Preference详解之Preference系的基本应用和管理(二)

引言 前面一篇文章Android进阶--Preference详解之初识Preference及Preference系(一)简单描述下了Preference的家族构成和基本知识,相信对于Preference早已不会陌生,肯定也跃跃欲试了吧,这篇文章就给大家总结下Preference.PreferenceActivity.PreferenceGroup.RingtonePreference的普通应用和管理,还有通过一些测试来验证一些机制和原理. 一.PreferenceActivity 1.Prefe