Android学习笔记之资源(上)

大多数资源文件都存放在res的相对子目录中,还有一些资源文件放在assets目录中。res只能存在相应的子目录,如,res/layout(布局资源),res/values(值资源),res/drawable(图像资源)。assets可以随意放,也可以放在子目录。两种方式主要区别如下。

  1. 引用资源的方式不同
    res目录中的所有资源都会在R类的相应子类中生成对应的int类型变量
    assets目录中的资源需要直接使用文件名来引用,如 assets/adc.xml,assets/abc/test.db。可以使用如下代码引用这俩个资源文件,并返回与资源文件对应的InputStream对象,剩下的操作就是普通java输入流操作了。
InputStream is1 = getResources().getAssets().open("adc.xml");
InputStream is2 = getResources().getAssets().open("abc/test.db");
  1. 处理方式不同
    res目录中的资源子目录除了raw外,其他资源目录的资源文件都会被编译,而assets和res/raw目录中的资源文件不会做任何处理。

图像(drawable)资源

普通的图像资源文件就是图片啦,Android支持3种图像格式:png,jpg,gif。官方推荐png格式
图层(Layer)资源
定义图层资源必须使用< layer-list>标签作为资源文件的根节点,< layer-list>标签中可以包含多个,< item>标签,每一< item>表示一个图像,最后一个item会显示在最顶层。
默认情况下,图像会尽量充满显示图像的视图。因此,显示的图像可能会被拉伸。为了避免拉伸,可以在< item>标签中使用< bitmap>标签引用图像。例子。

<!-- 定义图层资源,该资源由俩个图像层叠放置 -->
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
   <item android:top="20dp" android:left="20dp">
   <bitmap android:src="@drawable/images1"
           android:gravity="center"/>
   </item>
   <item android:top="20dp" android:left="20dp">
   <bitmap android:src="@drawable/images2"
           android:gravity="center"/>
   </item>
</layer-list>

上面代码涉及了四个偏移量,android:top: 顶部偏移的像素。其他的一样。下面在< ImageView>标签中引用上面的图层资源

<ImageView
      android:layout_width="fill_parent"
      android:layout_height="fill_parent"
      android:src="@drawable/layer"/>

效果就是两张图片叠加,最后一个item在外面。
图像状态(State)资源
当按钮处于不同状态(正常,按下,获得焦点等)时会显示不同的样式,这些样式一般使用不同的图像来渲染,这就需要指定与不同状态对应的图像,而图像状态资源就是用来指定这些图像的。

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
    <!-- 按下状态 -->
    <item android:state_pressed="true"
    android:drawable="@drawable/pressed">   
    </item>
    <!-- 获得焦点 -->
    <item android:state_focused="true"
          android:drawable="@drawable/focused">
    </item>
    <!-- 默认状态 -->
    <item android:drawable="@drawable/normal">    
    </item>

</selector>

淡入淡出(Crossfade)资源
淡入淡出是切换俩个图像,并且是这俩个图像以淡入淡出效果进行切换

<?xml version="1.0" encoding="utf-8"?>
<trabsition xmlns:android="http://schemas.android.com/apk/res/android">
   <item android:drawable="@drawable/lamp_off"/>
   <item android:drawable="@drawable/lamp_on"/>
</trabsition>
<!-- 引用 -->
<ImageView 
     android:id="@+id/imageview_lamp"
     android:layout_width="fill_parent"
     android:layout_height="wrap_content"
     android:src="@drawable/cross_fade"/>

下面使用java代码实现

public class CrossFade extends Activity{
     private ImageView ivLamp;
     private Button btn_on,btn_off;
     @Override
     public void onCreate(Bundle savedlnstanceState){
           super.onCreate(savedlnstanceState);
           setContentView(R.layout.main);
           ivLmap = (ImageView) findViewById(R.id.imageview_lamp);
           btn_on = (Button) findViewById(R.id.btn_on);
           btn_off = (Button) findViewById(R.id.btn_off);
           //添加事件监听方法
           btn_on.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                TransitionDrawable drawable = (TransitionDrawable)ivLamp.getDrawable();
                //从第一个切换到第二个使用1秒(1000毫秒)
                drawable.startTransition(1000);
            }
        });
        btn_off.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                TransitionDrawable drawable = (TransitionDrawable)ivLamp.getDrawable();
                //从第二个切换到第一个使用1秒(1000毫秒)
                drawable.startTransition(1000);
            }
        });
     }
}

运行可以看到俩张图片淡入淡出的效果。

嵌入(Inset)图像资源
如果显示的图像要求小于装载图像的视图(例如,背景图小于View区域),可以考虑使用嵌入图像资源。

<?xml version="1.0" encoding="utf-8"?>
<inset xmlns:android="http://schemas.android.com/apk/res/android"
   android:drawable="@drawable/background"
   android:insetTop="50dp"/>

将布局标签的背景属性值设为嵌入图像资源,运行程序,会发现背景图距头部距离是50dp。

外形(Shape)资源

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
       android:shape="rectangle">
       <!--  定义渐变色(从左下到右上绘制渐变色就是45度) -->
       <gradient android:startColor="#fff"
                 android:endColor="#342"
                 android:angle="45"/>
       <!-- 定义控件到边界的距离  -->
       <padding android:left="7dp"/>
       <!-- 定义边框线(灰色) -->
       <stroke android:width="2dp" android:color="#ccc"/>
       <!-- 定义圆角 -->
       <corners android:radius="8dp"/>
 </shape>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值