从零开始学android<ImageSwitcher图片切换组件.二十六.>

ImageSwitcher组件的主要功能是完成图片的切换显示,例如用户在进行图片浏览的时候,可以通过按钮点击一张张的切换显示的图片,而且使用ImageSwitcher组件在每次切换的时候也可以为其增加一些动画的效果,此类定义如下:

java.lang.Object

? android.view.View

? android.view.ViewGroup

? android.widget.FrameLayout

? android.widget.ViewAnimator

? android.widget.ViewSwitcher

? android.widget.ImageSwitcher

用到的方法


1

public ImageSwitcher(Context context)

构造

创建ImageSwitcher对象

2

public void setFactory(ViewSwitcher.ViewFactory factory)

普通

设置ViewFactory对象,用于完成两个图片切换时ViewSwitcher的转换操作

3

public void setImageResource(int resid)

普通

设置显示的图片资源ID

4

public void setInAnimation(Animation inAnimation)

普通

图片读取进ImageSwitcher时的动画效果

5

public void setOutAnimation(Animation outAnimation)

普通

图片从ImageSwitcher要消失时的动画效果

如果要想实现图片的切换功能,则定义的Activity类还必须实现ViewSwitcher.ViewFactory接口,以指定切换视图的操作工厂,此接口定义如下:

public
static interface ViewSwitcher.ViewFactory {

/**

* 创建一个新的View显示,并将其加入到ViewSwitcher之中

* @return新的View对象

*/

public
abstract View makeView() ;

}

private
class ViewFactoryImpl implements ViewFactory {

@Override

public View makeView() {

ImageView img = new ImageView(MyImageSwitcherDemo.this);
// 实例化图片显示

img.setBackgroundColor(0xFFFFFFFF); // 设置背景颜色

img.setScaleType(ImageView.ScaleType.CENTER);//
居中显示

img.setLayoutParams(new ImageSwitcher.LayoutParams(
// 自适应图片大小

LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));
// 定义组件

return img;

}

}


XMl文件

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity" >

    <ImageSwitcher
        android:id="@+id/imageSwitcher1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="114dp" >
    </ImageSwitcher>

    <Button
        android:id="@+id/button1"
        style="?android:attr/buttonStyleSmall"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBaseline="@+id/button2"
        android:layout_alignBottom="@+id/button2"
        android:layout_marginRight="20dp"
        android:layout_toLeftOf="@+id/imageSwitcher1"
        android:text="上一张" />

    <Button
        android:id="@+id/button2"
        style="?android:attr/buttonStyleSmall"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerVertical="true"
        android:layout_toRightOf="@+id/imageSwitcher1"
        android:text="下一张" />

</RelativeLayout>

JAVA文件

package com.example.imageswitcher;

import android.app.Activity;
import android.graphics.Color;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup.LayoutParams;
import android.view.animation.AnimationUtils;
import android.widget.Button;
import android.widget.ImageSwitcher;
import android.widget.ImageView;
import android.widget.ViewSwitcher.ViewFactory;

public class MainActivity extends Activity {
	private Button ButNext, ButPrevious;//初始化按钮
	private ImageSwitcher imageSwitcher;//初始化组件
	private int Images[] = { R.drawable.a1, R.drawable.a2, R.drawable.a3,
			R.drawable.a4, R.drawable.a5, R.drawable.a6 };//设置图片数据
	private int foot = 0;//设置角标

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		imageSwitcher = (ImageSwitcher) this.findViewById(R.id.imageSwitcher1);//获得组件
		ButNext = (Button) this.findViewById(R.id.button1);
		ButPrevious = (Button) this.findViewById(R.id.button2);
		imageSwitcher.setFactory(new Myfactory());//为组件设置组件工厂
		imageSwitcher.setInAnimation(AnimationUtils.loadAnimation(
				MainActivity.this, android.R.anim.fade_in));//设置图片进入动画
		imageSwitcher.setOutAnimation(AnimationUtils.loadAnimation(
				MainActivity.this, android.R.anim.fade_out));//设置图片离开动画
		imageSwitcher.setImageResource(Images[foot++]);//设置图片

//		按钮事件监听
		ButNext.setOnClickListener(new View.OnClickListener() {

			@Override
			public void onClick(View view) {
				// TODO Auto-generated method stub
				imageSwitcher.setImageResource(Images[foot++]);
				MainActivity.this.CheckEnable();//设置按钮是否可用防止数组越界

			}
		});
//		按钮事件监听
		ButPrevious.setOnClickListener(new View.OnClickListener() {

			@Override
			public void onClick(View arg0) {
				// TODO Auto-generated method stub
				imageSwitcher.setImageResource(Images[foot--]);
				MainActivity.this.CheckEnable();
			}
		});

	}

	class Myfactory implements ViewFactory {

		@Override
		public View makeView() {
			// TODO Auto-generated method stub
			ImageView image = new ImageView(MainActivity.this);//设置图片组件
			image.setBackgroundColor(Color.GRAY);//设置对齐效果
			image.setScaleType(ImageView.ScaleType.CENTER);//设置剧中
			image.setLayoutParams(new ImageSwitcher.LayoutParams( // 自适应图片大小
					LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT)); // 定义组件
			return image;//返回图片

		}
	}

	public void CheckEnable() {
		if (this.foot < this.Images.length - 1) {
			this.ButNext.setEnabled(true); // 按钮可用
		} else {
			this.ButNext.setEnabled(false); // 按钮不可用
		}
		if (this.foot == 0) {
			this.ButPrevious.setEnabled(false); // 按钮不可用
		} else {
			this.ButPrevious.setEnabled(true); // 按钮可用
		}

	}
}

+

Textswitcher与该组件的操作基本相同,不再做具体介绍,读者可自行练习

下节预报:

gallery拖拉组件

从零开始学android<ImageSwitcher图片切换组件.二十六.>

时间: 2024-10-09 10:49:00

从零开始学android<ImageSwitcher图片切换组件.二十六.>的相关文章

从零开始学android&lt;android事件的处理方式.二十四.&gt;

在android中一共有 多种事件,每种事件都有自己相对应的处理机制 如以下几种 1 单击事件 View.OnClickListener public abstract void onClick (View v) 单击组件时触发 2 单击事件 View.OnLongClickListener public abstract boolean onLongClick (View v) 长按组件时触发 3 键盘事件 View.OnKeyListener public abstract boolean

二十四、Android文件的读写

Android的文件读写与JavaSE的文件读写相同,都是使用IO流.而且Android使用的正是JavaSE的IO流,下面我们通过一个练习来学习Android的文件读写. 1.创建一个Android工程 [html] view plaincopy Project name:File BuildTarget:Android2.2 Application name:文件读写 Package name:test.file Create Activity:DateActivity Min SDK Ve

Android学习笔记二十四之ListView列表视图二

Android学习笔记二十四之ListView列表视图二 前面一篇我们介绍了常用的几种适配器的简单实现和ListView的简单使用,这一篇中,我们介绍一下ListView的优化和一些其它的问题. ListView优化方法一 在ListView中,我们最常用的就是自定义Adapter,在我们自定义Adapter中,需要实现两个比较重要的方法getCount()和getView(),前者是负责计算ListView的总Item数,后者是生成Item,有多少个Item就会调用getView()方法多少次

Android学习路线(二十四)ActionBar Fragment运用最佳实践

通过前面的几篇博客,大家看到了Google是如何解释action bar和fragment以及推荐的用法.俗话说没有demo的博客不是好博客,下面我会介绍一下action bar和fragment在实战中的应用,以及相关demo源码,希望和大家相互交流. 了解过fragment的同学们应该都知道,fragment是android 3.0版本才出现的的,因此如果要在支持android 3.0一下版本的工程中使用fragment的话是需要添加Support Library的.具体如何添加我就不再赘述

Android 沉浸式状态栏 实现方式二 ( 更简单 )

以前写过一个沉浸式状态栏 的实现方式 Android 沉浸式状态栏 实现方式一 现在有个更为简单的实现方式 . 相关链接 http://www.apkbus.com/forum.php?mod=viewthread&tid=255929&extra=page%3D3%26filter%3Dsortid%26orderby%3Ddateline%26sortid%3D12 1.效果图 demo 的 github 地址  https://github.com/zyj1609wz/Android

Android笔记二十四.Android基于回调的事件处理机制

如果说事件监听机制是一种委托式的事件处理,那么回调机制则与之相反,对于基于回调的事件处理模型来说,事件源和事件监听器是统一的,或者说事件监听器完全消失了,当用户在GUI控件上激发某个事件时,控件自己特定的方法将会负责处理该事件. 转载请表明出处:http://blog.csdn.net/u012637501(嵌入式_小J的天空) 一.View类的常见回调方法 为了使用回调机制来处理GUI控件上所发生的事件,需要为该组件提供对应的事件处理方法,而Java又是一种静态语言,我们无法为每个对象动态地添

Android开发系列(二十四):Notification的功能与用法

关于消息的提示有两种:一种是Toast,一种就是Notification.前者维持的时间比较短暂,后者维持的时间比较长. 而且我们平常手机的应用比如网易.贴吧等等都有很多的推送消息,就是用Notification实现的. Notification是显示在手机状态栏的通知-手机状态栏位于手机屏幕的上方.程序一般通过NotificationManager服务来发送Notification通知 Notification的一些方法,接下来我们都能够用到: setDefaults():设置通知LED等.音

Android学习笔记二十四.Service入门(二)绑定本地Service并与之通信

绑定本地Service并与之通信    通过上一篇博文的前3步,我们就算完成了一个Service及使用该Service的应用程序(Service为该应用程序的组成部分).但当程序通过startService()和stopService()启动.关闭Service时,Service与访问者之间基本上不存在太多的关联,因此Service和访问者之间也无法进行通信.数据交换.如果我们希望开发的Service能与访问者之间实现方法调用或数据交换,我们可以让访问者使用bindService()和unbin

Android开发系列(二十四):Notification的功能与使用方法

关于消息的提示有两种:一种是Toast,一种就是Notification.前者维持的时间比較短暂,后者维持的时间比較长. 并且我们寻常手机的应用比方网易.贴吧等等都有非常多的推送消息.就是用Notification实现的. Notification是显示在手机状态栏的通知-手机状态栏位于手机屏幕的上方.程序一般通过NotificationManager服务来发送Notification通知 Notification的一些方法.接下来我们都可以用到: setDefaults():设置通知LED等.

《Android源码设计模式解析与实战》读书笔记(二十四)

第二十四章.桥接模式 桥接模式也称为桥梁模式,是结构型设计模式之一.桥接模式中体现了"单一职责原则"."开闭原则"."里氏替换原则"."依赖倒置原则"等.同时它也是很实用的一种模式. 1.定义 将抽象部分与现实部分分离,使它们都可以独立地进行变化. 2.使用场景 (1)如果一个系统需要在构建的抽象化角色和具体角色之间增加更多的灵活性,避免在两个层次之间建立静态的继承联系. (2)对于那些不希望使用继承或因为多层次继承导致系统类