`

7.1.1 ImageSwitcher案例分析详解

阅读更多
ImageSwitcher图像切换器,可以切换器图像。ImageSwitcher类的继承图如下:
java.lang.Object
   ↳ android.view.View
     ↳ android.view.ViewGroup
       ↳ android.widget.FrameLayout
         ↳ android.widget.ViewAnimator
           ↳ android.widget.ViewSwitcher
             ↳ android.widget.ImageSwitcher
android.widget.ImageSwitcher继承了android.widget.FrameLayout框架布局类。为了便于学习,我们把官方的ImageSwitcher例子(ApiDemos/src/com/example/android/apis/view/ImageSwitcher1.java)做了一些修改,例子运行如图7-6屏幕,点击屏幕下面的缩图,实现图片的切换。
 


图7-6 ImageSwitcher
请参考代码清单7-4,完整代码请参考chapter7_1工程中MyImageSwitcher代码部分。
【代码清单7-4】
public class MyImageSwitcher extends Activity {

	private ImageSwitcher mSwitcher;

	private Integer[] mThumbIds = { R.drawable.photo1_thumb,
			R.drawable.photo2_thumb, R.drawable.photo3_thumb,
			R.drawable.photo4_thumb, R.drawable.photo5_thumb,
			R.drawable.photo6_thumb };

	private Integer[] mImageIds = { R.drawable.photo1, R.drawable.photo2,
			R.drawable.photo3, R.drawable.photo4, R.drawable.photo5,
			R.drawable.photo6 };

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		requestWindowFeature(Window.FEATURE_NO_TITLE);

		setContentView(R.layout.image_switcher);

		mSwitcher = (ImageSwitcher) findViewById(R.id.switcher);
		mSwitcher.setFactory(new ViewSwitcher.ViewFactory() {

			@Override
			public View makeView() {
				ImageView i = new ImageView(MyImageSwitcher.this);
				i.setBackgroundColor(0xFF000000);
				i.setScaleType(ImageView.ScaleType.FIT_CENTER);
				i.setLayoutParams(new ImageSwitcher.LayoutParams(
						LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));
				return i;
			}
		});

		Gallery g = (Gallery) findViewById(R.id.gallery);
		g.setAdapter(new ImageAdapter(this));
		g.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {

			@Override
			public void onItemSelected(AdapterView parent, View v,
					int position, long id) {
				mSwitcher.setImageResource(mImageIds[position]);
			}

			@Override
			public void onNothingSelected(AdapterView<?> parent) {
			}
		});
		
… … 

		}
… … 
	}

在ImageSwitcher图像切换器中需要提供缩图数组集合mThumbIds和正常图片集合mImageIds。requestWindowFeature(Window.FEATURE_NO_TITLE)方法是设置没有标题的屏幕。
实现图像切换关键代码是mSwitcher.setFactory(new ViewSwitcher.ViewFactory() {…}),需要提供一个ViewSwitcher.ViewFactory接口为图像切换的时候创建一个View对象,由于是图像切换器,这个View是一个ImageView类的实例,i.setBackgroundColor(0xFF000000)指定背景颜色,i.setScaleType(ImageView.ScaleType.FIT_CENTER)指定排列方式为居中。下面的代码就是设置图片的布局与父容器匹配模式:
i.setLayoutParams(new ImageSwitcher.LayoutParams( LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));
在屏幕下面的缩图是Gallery类型,点击缩图触发事件AdapterView.OnItemSelectedListener()时改变图片切换器的图片源mSwitcher.setImageResource(mImageIds[position]),从而实现图片的切换。
缩图的Gallery还必须实现一个BaseAdapter适配器,代码请参考代码清单7-5,完整代码请参考chapter7_1工程中MyImageSwitcher代码部分。
【代码清单7-5】
public class ImageAdapter extends BaseAdapter {
		public ImageAdapter(Context c) {
			mContext = c;
		}

		public int getCount() {
			return mThumbIds.length;
		}

		public Object getItem(int position) {
			return mThumbIds[position];
		}

		public long getItemId(int position) {
			return position;
		}

		public View getView(int position, View convertView, ViewGroup parent) {
			ImageView i = new ImageView(mContext);
			i.setImageResource(mThumbIds[position]);
			i.setAdjustViewBounds(true);
			i.setLayoutParams(new Gallery.LayoutParams(
					LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
			i.setBackgroundResource(R.drawable.picture_frame);
			return i;
		}

		private Context mContext;

	}

getView()方法中返回缩图的对象,i.setImageResource(mThumbIds[position])是设置图片源,i.setAdjustViewBounds(true)设置图片对象边框自动调节,i.setLayoutParams()设置图片控件的布局,i.setBackgroundResource设置背景图片。
                                               出自《Android开发案例驱动教程》第七章
  • 大小: 101.8 KB
分享到:
评论

相关推荐

    李立宗_OPENCV 编程案例详解.zip

    第8 章高级篇——特征分析.. 289 8.1 尺度空间 290 8.1.1 尺度与旋转不变性. 290 8.1.2 特征点尺度变换.. 290 8.2 特征描述子.. 291 8.2.1 SIFT 特征. 292 8.2.2 SURF 特征.. 296 8.2.3 ORB 特征. 300 8.3 方向梯度...

    VTK-7.1.1.zip VTK-7.1.1.源码

    VTK,全称为“Visualization Toolkit”,是一个开源的三维可视化库,广泛用于科学计算和数据分析的图形用户界面开发。VTK-7.1.1.zip 是该库的一个特定版本,包含了VTK 7.1.1的完整源码,使得开发者能够深入理解其...

    苹果5ios7.1.1shsh备份

    【苹果5ios7.1.1SHSH备份详解】 在苹果设备的世界里,SHSH(Software SHadowSHard Signature)备份是一项重要的技术概念,尤其对于那些希望保留旧版iOS系统或者进行越狱操作的用户来说。标题“苹果5ios7.1.1shsh...

    Cisco Packet Tracer 7.1.1

    Cisco Packet Tracer 7.1.1是一款由Cisco Systems开发的网络模拟软件,主要用于教育和培训目的,特别是在Cisco Certified Internetwork Expert(CCIE)认证的学习过程中。这个版本相较于早期的Packet Tracer,提供了...

    android-7.1.1_r1

    #### 五、关键特性分析 1. **A/B分区**:从Android 7.0开始引入了A/B分区机制,使得系统可以在不重启的情况下进行更新,提高了用户体验。 2. **Runtime Compilation**:Android 7.1.1继续优化ART运行时编译器,提升...

    gradle-7.1.1-all.zip

    《Gradle 7.1.1 全解析:构建现代软件工程的新里程碑》 Gradle,作为当前软件开发领域中最流行的构建自动化工具之一,已经发展成为Java生态系统中的中流砥柱。随着版本的不断迭代,Gradle 7.1.1的发布无疑为开发者...

    Android7.1.1 (API 25) SDK Platform 下载

    Android 7.1.1(API 25)SDK Platform 是Android开发的重要组成部分,它为开发者提供了构建、测试和调试针对Android 7.1.1系统应用所需的所有工具和资源。这一版本的更新主要是在Android 7.0的基础上进行了一些功能...

    XenServer-7.1.1

    xenserver7.1.1 iso镜像文件。

    Android 7.1.1源码(Nougat)

    一、Android 7.1.1 Nougat新特性与源码分析 1. **多窗口支持**:Android 7.1.1引入了多窗口模式,允许两个应用同时显示在屏幕上。源码中的`frameworks/base/services/core/java/com/android/server/wm/`目录下包含...

    DS3622Xs-7.1.1懒人包

    标题中的“DS3622Xs-7.1.1懒人包”指的是一个针对特定设备或系统的软件集合,可能是固件更新、系统优化工具或者是应用安装包。"DS3622Xs"可能代表一款NAS(网络附加存储)设备的型号,而"7.1.1"则表示该设备的软件...

    gradle-7.1.1.zip

    Gradle是一个基于Apache Ant和Apache Maven概念的项目自动化构建开源工具,该压缩文件包含gradle-7.1.1-bin.zip、官网下载地址和init.gradle,欢迎下载!

    IOS7.1.1(SHSH)备份

    IOS7.1.1(SHSH)备份

    Cisco Packet Tracer 7.1.1 Windows 64 bit

    这是官网下载的Cisco Packet Tracer 7.1.1 Windows 64 bit和其他地方下载的chinese.ptl汉化包。

    VTK-7.1.1.rar

    在本案例中,我们讨论的是一个名为“VTK-7.1.1.rar”的压缩包,其中包含了用户自编译的VTK 7.1.1版本,该版本是为Visual Studio 2017 (VS2017)在Windows 10操作系统下构建的,支持64位(X64)架构,并且集成了MFC...

    Android 7.1.1 (API 25) SDK Platform 下载

    # mv /opt/android-sdk/platforms/android-25/android-7.1.1/* /opt/android-sdk/platforms/android-25/ # rm -rf /opt/android-sdk/platforms/android-25/android-7.1.1 官网下载地址:...

    DS918+-7.1.1虚拟机引导.img

    DS918+-7.1.1虚拟机引导.img

    Postman7.1.1.zip

    在本文中,我们将深入探讨Postman 7.1.1版本及其绿色版的特点、功能以及如何使用。 首先,让我们理解“绿色版”的含义。在软件领域,绿色版通常指的是无需安装即可使用的便携式版本。它不写入系统注册表,不会在...

    Packet Tracer 7.1.1 for Windows 64 bit.zip

    5. **教学资源**:Packet Tracer包含了丰富的教学材料,如教程、练习和案例研究,适合教师和学生共同学习。 6. **协作与分享**:用户可以创建项目并与其他用户共享,这在团队学习或远程教育中非常有用。 7. **汉化...

    Cisco Packet Tracer 7.1.1湖科大教书匠中文语言包

    Cisco Packet Tracer 7.1.1湖科大教书匠中文语言包,基于英文7.1.1版,用于7.1.1版效果最好。

Global site tag (gtag.js) - Google Analytics