标签: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:指定一个特定状态;
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对象的完整语法格式如下:
- <? xml version="1.0" encoding="utf-8"?>
- <shape xmlns:android="http://schemas.android.com/apk/res/android"
- android:shape=["rectangle"|"oval"|"line"|"ring"]>
- <!-- 定义几何图形的四个角的弧度 -->
- <corners
- android:radius="integer"
- android:topLeftRadius="integer"
- android:topRightRadius="integer"
- android:bottomLeftRadius="integer"
- android:bottomRightRadius="integer"/>
- <!-- 定义使用渐变色填充 -->
- <gradient
- android:angle="integer"
- android:centerX="integer"
- android:centerY="integer"
- android:centerColor="integer"
- android:endColor="color"
- android:gradientRadius="integer"
- android:startColor="color"
- android:type=["linear"|"radial"|"sweep"]
- android:usesLevel=["true"|"false"]/>
- <!-- 定义几何形状的内边框 -->
- <padding
- android:left="integer"
- android:top="integer"
- android:right="integer"
- android:bottom="integer"/>
- <!-- 定义几何形状的大小 -->
- <corners
- android:width="integer"
- android:color="color"
- android:dashWidth="integer"
- android:dashGap="integer"/>
- <!-- 定义使用单种颜色填充 -->
- <solid
- android:color="color"/>
- <!-- 定义几何形状绘制边框 -->
- <stroke
- android:width="integer"
- android:color="color"
- android:dashWidth="integer"
- android:dashGap="integer"/>
- </shape>
4.ClipDrawable资源
ClipDrawable代表从其他位图上截取的一个"图片片段"。在XML文件中定义ClipDrawable对象使用<clip../>元素,该元素具有以下属性:
>android:drawable:指定截取的源Drawable对象
>android:clipOrientation:指定截取方向,可设置水平截取或垂直截取
>android:gravity:指定截取时的对齐方式
该元素的语法为:
- <? xml version="1.0" encoding="utf-8"?>
- <clip xmlns:android="http://schemas.android.com/apk/res/android"
- android:drawable="@drawable/drawable_resource"
- android:clipOritentation=["horizontal"|"vertical"]
- 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)设置补间动画的语法格式
- <? xml version="1.0" encoding="utf-8"?>
- <set xmlns:android="http://schemas.android.com/apk/res/android"
- android:interpolator="@anim/interpolator_resource"
- android:shareInterpolator=["true"|"false"]
- android:duration="integer(持续的时间)">
- <!--设置透明度的改变-->
- <alpha
- android:fromAlpha="float"
- android:toAlpha="float"/>
- <!--设置图片进行缩放改变-->
- <scale
- android:fromXScale="float"
- android:toXScale="float"
- android:fromYScale="float"
- andrroid:toYScale="float"
- android:pivotX="float"
- android:pivotY="float"/>
- <!--设置图片进行位移改变-->
- <translate
- android:fromXDelta="float"
- android:toXDelta="float"
- android:fromYDelta="float"
- android:toYDelta="float"/>
- <!--设置图片进行旋转改变-->
- <rotate
- android:fromDegress="float"
- android:toDegress="float"
- android:pivotX="float"
- android:pivotY="float"/>
- </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)效果演示
Android资源使用详解(二)
标签:android 应用
原文地址:http://blog.csdn.net/u012637501/article/details/46531525