Android实战简易教程-第八枪(ImageSwitcher用法实例)

ImageSwitcher 组件的主要功能是完成图片的切换显示,例如用户在进行图片浏览时,可以通过单击按钮逐张切换显示的图片,在进行切换时还可以加入一些动画效果。

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

android.widget

接口 ViewSwitcher.ViewFactory

包容类:
ViewSwitcher

public static interface ViewSwitcher.ViewFactory

Creates views in a ViewSwitcher.


方法摘要
 View makeView()

Creates a new View to be added in a ViewSwitcher.

方法详细信息

makeView

View makeView()
Creates a new View to be added in aViewSwitcher.

返回:
a View

本接口中只存在一个makeView()方法,此方法的主要功能是返回一个View对象的多干设置参数。

下面看一下代码:

1.main.xml代码:

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

    <ImageSwitcher
        android:id="@+id/imageSwitcher"
        android:layout_gravity="center"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal" >

        <Button
            android:id="@+id/btnPrevious"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:enabled="false"
            android:text="上一张" />

        <Button
            android:id="@+id/btnNext"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:enabled="true"
            android:text="下一张" />
    </LinearLayout>

</LinearLayout>

2.MainActivity.java代码如下:

package org.yayun.demo;

import android.R.anim;
import android.R.integer;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup.LayoutParams;
import android.view.animation.Animation;
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 ImageSwitcher imageSwitcher;
	private Button btnPrevious;
	private Button btnNext;
	private int foot=0;
	private int[] imgRes=new int[]{R.drawable.ispic_a,R.drawable.ispic_b,R.drawable.ispic_c,R.drawable.ispic_d,R.drawable.ispic_e,};

	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState); // 生命周期方法
		super.setContentView(R.layout.main); // 设置要使用的布局管理器
	imageSwitcher=(ImageSwitcher)findViewById(R.id.imageSwitcher);
	btnPrevious=(Button)findViewById(R.id.btnPrevious);
	btnNext=(Button)findViewById(R.id.btnNext);

	imageSwitcher.setFactory(new ViewFactory() {//设置转化工厂

		public View makeView() {//覆写方法
			ImageView imageView=new ImageView(MainActivity.this);
			imageView.setBackgroundColor(0xFFFFFFFF);
			imageView.setScaleType(ImageView.ScaleType.CENTER);//居中显示
			imageView.setLayoutParams(new ImageSwitcher.LayoutParams(LayoutParams.FILL_PARENT,LayoutParams.FILL_PARENT));//定义组件
			return imageView;
		}
	});
	imageSwitcher.setImageResource(imgRes[foot++]);//初始化时显示,必须放在工厂后面,否则会报NullPointerException
	imageSwitcher.setInAnimation(AnimationUtils.loadAnimation(this, android.R.anim.fade_in));//设置动画
	imageSwitcher.setOutAnimation(AnimationUtils.loadAnimation(this, android.R.anim.fade_out));//设置动画
	btnPrevious.setOnClickListener(new OnClickListener() {

		public void onClick(View v) {
			MainActivity.this.imageSwitcher.setImageResource(imgRes[foot--]);
			MainActivity.this.checkBtnEnable();

		}
	});
	btnNext.setOnClickListener(new OnClickListener() {

		public void onClick(View v) {
			MainActivity.this.imageSwitcher.setImageResource(imgRes[foot++]);
			MainActivity.this.checkBtnEnable();

		}
	});

	}

	protected void checkBtnEnable() {//判断按钮可用状态
		if(this.foot<this.imgRes.length-1){
			this.btnNext.setEnabled(true);
		}else{
			this.btnNext.setEnabled(false);
		}
		if(this.foot==0){
			this.btnPrevious.setEnabled(false);
		}else {
			this.btnPrevious.setEnabled(true);
		}

	}
}

3.运行实例如下:

总结

1.不设置setFactory()方法会出现NullPointerException错误。

2.设置动画的方法:setInAnimation(AnimationUtils.loadAnimation(this, android.R.anim.fade_in));

3.自定义判断按钮是否可用的方法checkBtnEnable()

时间: 2024-10-14 01:31:40

Android实战简易教程-第八枪(ImageSwitcher用法实例)的相关文章

Android实战简易教程-第十三枪(五大布局研究)

我们知道Android系统应用程序一般是由多个Activity组成,而这些Activity以视图的形式展现在我们面前, 视图都是由一个一个的组件构成的.组件就是我们常见的Button.TextEdit等等.那么我们平时看到的Android手机中那些漂亮的界面是怎么显示出来的呢?这就要用到Android的布局管理器了,网上有人比喻的很好:布局好比是建筑里的框架,组件按照布局的要求依次排列,就组成了用于看见的漂亮界面了. 在分析布局之前,我们首先看看控件:Android中任何可视化的控件都是从and

Android实战简易教程-第十枪(画廊组件Gallery实用研究)

Gallery组件用于拖拽浏览图片,下面我们就来看一下如何实现. 一.实现Gallery 1.布局文件很简单: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/MyLayout" android:lay

Android实战简易教程-第二十三枪(基于Baas的用户注册验证用户名是否重复功能!)

接上一篇,添加验证用户名是否已经注册功能! 只需要修改MainActivity.java: package com.example.logintest; import java.util.List; import org.w3c.dom.UserDataHandler; import cn.bmob.v3.Bmob; import cn.bmob.v3.BmobQuery; import cn.bmob.v3.listener.FindListener; import cn.bmob.v3.li

Android实战简易教程-第二十三枪(基于Baas的用户注冊和登录模块实现!)

接着上两篇文章.我们基于Bmob提供的API实现用户登录功能.总体看一下代码. 1.注冊页面xml: <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layou

Android实战简易教程-第二十三枪(基于Baas的用户注册和登录模块实现!)

接着上两篇文章,我们基于Bmob提供的API实现用户登录功能,整体看一下代码. 1.注册页面xml: <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layou

Android实战简易教程-第三枪(实现简单绘图组件)

首先我们要了解触摸事件(OnTouchListener)指的是当用户接触到屏幕之后所产生的一种事件形式,而当用户在屏幕上划过时,可以使用触摸事件取得用户当前的坐标. 一.坐标显示 在实现画图功能之前,我们先利用触摸事件获得当前触摸的坐标. main.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.c

Android实战简易教程-第二十七枪(Android设置头像上传功能实现)

在一般开发中上传图片作为头像的功能非常常见,下面我们研究下具体实现,代码很简单,大家可以直接拿来使用哦! 1.先看一下布局文件,很是丑陋: <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent&

Android实战简易教程-第三十九枪(第三方短信验证平台Mob和验证码自动填入功能结合实例)

用户注册或者找回密码时一般会用到短信验证功能,这里我们使用第三方的短信平台进行验证实例. 我们用到第三方短信验证平台是Mob,地址为:http://mob.com/ 一.注册用户.获取SDK 大家可以自行注册,得到APPKEY和APPSECRET,然后下载SDK,包的导入方式如截图: 二.主要代码 SMSSendForRegisterActivity.java:(获取验证码页) package com.qiandaobao.activity; import java.util.regex.Mat

Android实战简易教程-第五十五枪(窃听风云之电话录音上传)

前一段时间我写过一篇关于短信监听的文章Android实战简易教程-第四十枪(窃听风云之短信监听),话说现在短信用的越来越少了啊,下面来个更猛的,电话录音监听上传,电话接通后开始录音,电话挂断后将录音上传.这里我们还是借助Bmob提供的上传服务,将录音文件上传到bomb的服务器,可以自行下载,播放录音. 一.配置bmob 配置bmob服务很是简单,注册账号,下载jar包,将jar包引入libs文件目录下: 然后配置权限: <uses-permission android:name="andr