Android-自定义图像资源的使用(2)

Android-自定义图像资源的使用

2014年4月29日

上一篇博客,介绍前面几种图像资源的使用,本篇博客把剩下的全部介绍完:

  • 普通图像资源
  • XML图像资源
  • Nine-patch图像资源
  • XML Nine-patch图像资源
  • 图层(Layer)图像资源
  • 图像状态(state)资源
  • 图像级别(Level)资源
  • 淡入淡出(transition)资源
  • 嵌入(Inset)图像资源
  • 剪切(Clip)图像资源
  • 比例(Scale)图像资源
  • 外形(Shape)图像资源

代码资源:http://download.csdn.net/detail/wwj_748/7263481

有兴趣的朋友可以加本人创建的群,里面有丰富的学习资源哦:299402133(移动开发狂热者群)

图像状态资源的使用

注:部分例子来源《Android应用实战-李宁》,经由本人整理。

按钮状态变化,大家应该知道了吧。按下一个效果,松开又一个效果,这就是状态的改变。

/05_KindOfDrawableUse/res/drawable/button.xml

<?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" /> <!-- pressed -->
    <item android:state_focused="true"
          android:drawable="@drawable/focused" />
    <item android:drawable="@drawable/normal" />
</selector>

在drawable目录下,定义一个selector标签的选择器,并在布局文件中使用

/05_KindOfDrawableUse/res/layout/state_res.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="@drawable/button"
        android:text="按钮" />

</LinearLayout>

上面的Button通过设置background来引用我们定义好的selector

效果如下:

图像级别资源的使用

/05_KindOfDrawableUse/res/drawable/lamp_level.xml

<?xml version="1.0" encoding="utf-8"?>
<level-list xmlns:android="http://schemas.android.com/apk/res/android">
	<item android:drawable="@drawable/lamp_off" android:minLevel="6"
		android:maxLevel="10" />
	<item android:drawable="@drawable/lamp_on" android:minLevel="12"
		android:maxLevel="20" />
</level-list>

/05_KindOfDrawableUse/res/layout/level_res.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <ImageView
        android:id="@+id/imageview_lamp"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:src="@drawable/lamp_level" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:onClick="onClick_LampOn"
        android:text="开灯" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:onClick="onClick_LampOff"
        android:text="关灯" />

</LinearLayout>

/05_KindOfDrawableUse/src/com/wwj/drawable/LevelDrawableRes.java

package com.wwj.drawable;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.ImageView;

/**
 * 图像级别资源的使用
 *
 * 在res/drawable建立图像级别资源
 *
 * 然后在布局文件的控件中使用
 *
 * @author wwj
 *
 */
public class LevelDrawableRes extends Activity {

	private ImageView ivLamp;

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.level_res);

		ivLamp = (ImageView) findViewById(R.id.imageview_lamp);
		// 设置Level为8,显示lamp_off.png
		ivLamp.setImageLevel(8);
	}

	public void onClick_LampOn(View view) {
		// LevelListDrawable levelListDrawable =
		// (LevelListDrawable)ivLamp.getDrawable();
		// levelListDrawable.setLevel(15);
		// 设置Level为15,显示lamp_on.png
		ivLamp.setImageLevel(15);

	}

	public void onClick_LampOff(View view) {
		// 设置Level为6,显示lamp_off.png
		ivLamp.getDrawable().setLevel(6);

	}
}

效果图如下:

过渡图像资源的使用

这个图像资源是用来展示图像过渡的,比如一盏灯从不亮到亮的缓慢过渡。

/05_KindOfDrawableUse/res/drawable/lamp_transition.xml

<?xml version="1.0" encoding="utf-8"?>
<transition xmlns:android="http://schemas.android.com/apk/res/android">
	<item android:drawable="@drawable/lamp_off" />
	<item android:drawable="@drawable/lamp_on" />
</transition>

/05_KindOfDrawableUse/res/layout/cross_fade_res.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <ImageView
        android:id="@+id/imageview_lamp"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/lamp_transition" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:onClick="onClick_LampOn"
        android:text="开灯" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:onClick="onClick_LampOff"
        android:text="关灯" />

</LinearLayout>

/05_KindOfDrawableUse/src/com/wwj/drawable/CrossFadeDrawableRes.java

package com.wwj.drawable;

import android.app.Activity;
import android.graphics.drawable.TransitionDrawable;
import android.os.Bundle;
import android.view.View;
import android.widget.ImageView;

/**
 * 淡入淡出资源的使用
 *
 * @author wwj
 *
 */
public class CrossFadeDrawableRes extends Activity {
	private ImageView ivLamp;

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.cross_fade_res);

		ivLamp = (ImageView) findViewById(R.id.imageview_lamp);
	}

	public void onClick_LampOn(View view) {
		// 从第一个图像切换到第二个图像。其中使用1秒的时间完成淡入淡出效果
		TransitionDrawable drawable = (TransitionDrawable) ivLamp.getDrawable();
		drawable.startTransition(1000);
	}

	public void onClick_LampOff(View view) {
		// 从第二个图像切换第一个图像。其中使用1秒的时间完成淡入淡出效果
		TransitionDrawable drawable = (TransitionDrawable) ivLamp.getDrawable();
		drawable.reverseTransition(1000);
	}
}

效果图如下:

嵌入图像资源的使用

/05_KindOfDrawableUse/res/drawable/inset.xml

<?xml version="1.0" encoding="utf-8"?>
<inset xmlns:android="http://schemas.android.com/apk/res/android"
    android:drawable="@drawable/logo"
    android:insetBottom="10dp"
    android:insetLeft="10dp"
    android:insetRight="10dp"
    android:insetTop="10dp" >

</inset>
<!--
     android:insetBottom="10dp" 图像距离下边的距离
    android:insetLeft="10dp" 图像距离左标的距离
    android:insetRight="10dp" 图像距离右边的距离
    android:insetTop="10dp" 图像距离上边的距离
-->

/05_KindOfDrawableUse/res/layout/inset_res.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <ImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="@drawable/inset" />

</LinearLayout>

效果图如下:

剪切图像资源的使用

/05_KindOfDrawableUse/res/drawable/clip.xml

<?xml version="1.0" encoding="utf-8"?>
<clip xmlns:android="http://schemas.android.com/apk/res/android"
    android:clipOrientation="horizontal"
    android:drawable="@drawable/progress"
    android:gravity="left" />

/05_KindOfDrawableUse/res/layout/clip_res.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:background="@drawable/background"
    android:orientation="vertical" >

    <ImageView
        android:id="@+id/image"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:background="@drawable/clip" />

</LinearLayout>

/05_KindOfDrawableUse/src/com/wwj/drawable/ClipDrawableRes.java

package com.wwj.drawable;

import android.app.Activity;
import android.graphics.drawable.ClipDrawable;
import android.os.Bundle;
import android.widget.ImageView;

/**
 * 剪切图像的使用
 *
 * 在res/drawable目录下定义clip资源
 *
 * @author wwj
 *
 */
public class ClipDrawableRes extends Activity {
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.clip_res);
		ImageView imageview = (ImageView) findViewById(R.id.image);
		ClipDrawable drawable = (ClipDrawable) imageview.getBackground();
		// 截取30%的图像
		drawable.setLevel(3000);
	}
}

效果图如下:

比例图像资源的使用

/05_KindOfDrawableUse/res/drawable/scale.xml

<?xml version="1.0" encoding="utf-8"?>
<scale xmlns:android="http://schemas.android.com/apk/res/android"
    android:drawable="@drawable/logo"
    android:scaleGravity="center_vertical|center_horizontal"
    android:scaleHeight="80%"
    android:scaleWidth="80%" >

</scale>

这个比例图片没有效果,不知道为何

外形图像资源的使用

外形图像是用得比较多,可以实现自己想要的效果,比如一个文本框

/05_KindOfDrawableUse/res/drawable/shape.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle" >

    <gradient
        android:angle="45"
        android:endColor="#80FF00FF"
        android:startColor="#FFFF0000" />

    <padding
        android:bottom="7dp"
        android:left="7dp"
        android:right="7dp"
        android:top="7dp" />

    <stroke
        android:width="2dp"
        android:color="#FFF" />

    <corners android:radius="8dp" />

</shape>

/05_KindOfDrawableUse/res/layout/shape_res.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_margin="20dp"
        android:background="@drawable/shape"
        android:text="Shape Label" />

</LinearLayout>

效果图如下:

关于Android提供的所有图像资源已经通过两篇博文给大家介绍完了,一些具体的参数没有列出来,也没有详细解释,各位想了解更多的话,可以到官网查看具体参数的使用。

Android-自定义图像资源的使用(2),码迷,mamicode.com

时间: 2024-12-06 04:56:53

Android-自定义图像资源的使用(2)的相关文章

Android 自定义Drawable 资源引用问题

问题的复现: Activity布局文件代码如下: <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_par

Android资源之图像资源(状态图像资源)

在上一篇博文中.我主要解说了XML图像资源中的图层资源,在此图像资源博文中我会给大家陆续解说XMl图像资源的图像状态资源.图像级别资源.淡入淡出资源.嵌入图像资源.剪切图像资源和外形资源. 1.图像状态资源: Android SDK提供的Button控件默认样式显得有些单调.并且这样的样式与炫丽的界面搭配在一起极不协调.当然.我们能够使用ImageView或ImgaeButton控件配合不同状态的图像做出非常酷的button,这里我给出用java代码实现button按下与正常状态的特效: btn

Android资源之图像资源(淡入淡出、嵌入)

今天把图像资源剩余的几个知识梳理一下.淡入淡出资源同图像状态和图像级别资源一样可以切换两个图像(目前只支持两个图像的切换),并且使这两个图像以淡入淡出效果进行切换.如上一篇博文介绍的开关电灯一样,如果加上淡入淡出效果会更好. 下面在res/drawable目录中建立一个cross_fade.xml文件,该文件内容如下: <?xml version="1.0" encoding="UTF-8"?> <!-- transition标签中只能有两个ite

Android资源之图像资源(1)

以前看别人的程序的drawable文件夹里有xml资源,说实话第一次见到这样的xml图像资源时,我真心不知道是干什么的.抽空学习了一下图像资源,才了解了这类图像资源的妙用.下面我来分享一下这部分知识: Android 中的图像资源文件保存在res/drawable目录中.在图像资源目录中不仅可以存储各种格式(jpg,png,gif等)的图像文件,还可以使用各种XML格式的图像资源来控制图像的状态 和行为. 1.普通图像资源 Android支持3种图像格式:png.jpg和gif.官方推荐使用pn

Android资源之图像资源(图像级别资源)

图像状态资源只能定义有限的几种状态.如果需要更多的状态,就要使用图像级别资源.在该资源文件中可以定义任意多个图像级别.每个图像级别是一个整数区间,可以通过ImageView.setImageLevel或Drawable.setLevel方法切换不同状态的图像. 图像级别资源是XML格式的文件,必须将<level-list>标签作为XML的根节点.<level-list>标签中可以有任意多个<item>标签,每一个<item>标签表示一个级别区间.级别区间用a

Android 自定义Gallery浏览图片

之前写的<Android ImageSwitcher和Gallery的使用>一文中提到我在教室一下午为实现那个效果找各种资料.期间在网上找了一个个人觉得比较不错的效果,现在贴图上来: 其实这个效果使用的知识点就是图像的获取.创建.缩放.旋转.Matrix类.Canvas类等,另外就是自定义的Gallery控件. 相信大家都期待马上上代码了吧,嘻嘻.(注释比较多,相信大家都能看懂.) main.xml: <?xml version="1.0" encoding=&quo

Android自定义相机超详细讲解

Android自定义相机超详细讲解 转载请标明出处: http://blog.csdn.net/vinicolor/article/details/49642861: 由于网上关于Android自定义相机的文章写得不是太详细,Google官方的文档又说得不太容易理解,所以今天我来详细讲解一下Android自定义相机. 这篇文章主要写给一些刚刚接触Android的那些看官方API困难以及不太了解Android机制的同学们,所以熟练开发者可以绕道了. 最近在使用Camera类的时候发现居然被弃用了,

[原] Android 自定义View步骤

例子如下:Android 自定义View 密码框 例子 1 良好的自定义View 易用,标准,开放. 一个设计良好的自定义view和其他设计良好的类很像.封装了某个具有易用性接口的功能组合,这些功能能够有效地使用CPU和内存,并且十分开放的.但是,除了开始一个设计良好的类之外,一个自定义view应该: l 符合安卓标准 l 提供能够在Android XML布局中工作的自定义样式属性 l 发送可访问的事件 l 与多个Android平台兼容. Android框架提供了一套基本的类和XML标签来帮您创

Android-自定义图像资源的使用(1)

Android-自定义图像资源的使用 2014年4月28日 周一 天气晴朗 心情平静 本篇博文给大家介绍一下,在Android开发中经常用到的一些图像资源,详细内容麻烦请各位认真查看官网,下面附上一个链接:http://developer.android.com/guide/topics/resources/drawable-resource.html,本篇博客主要给出使用示例,让童鞋们对这些图像资源有个直观的了解. 代码资源:http://download.csdn.net/detail/ww

Android中主要资源文件及文件夹介绍

在Android项目文件夹里面,主要的资源文件是放在res文件夹里面的 1:assets文件夹是存放不进行编译加工的原生文件,即该文件夹里面的文件不会像xml,java文件被预编译,可以存放一些图片,html,js, css等文件.2:res文件夹里面的多个文件夹的各自介绍 res/anim/ XML文件,它们被编译进逐帧动画(frame by frame animation)或补间动画(tweened animation)对象 res/drawable/ .png..9.png..jpg文件,