Android应用开发控件——Gallery和ImageSwitcher

    Gallery组件主要用于横向显示图像列表,不过按常规做法。Gallery组件只能有限地显示指定的图像。也就是说,如果为Gallery组件指定了10张图像,那么当Gallery组件显示到第10张时,就不会再继续显示了。这虽然在大多数时候没有什么关系,但在某些情况下,我们希望图像显示到最后一张时再重第1张开始显示,也就是循环显示。要实现这种风格的Gallery组件,就需要对Gallery的Adapter对象进行一番改进。

以下通过Gallery模拟循环显示图像,在单击某一个Gallery组件中的图像时在下方显示一个放大的图像(使用ImageSwitcher组件)。

最终效果图如下:

2011041212111089.jpg

一、Layout布局文件

A:主界面布局文件

ContractedBlock.gifExpandedBlockStart.gifView Code
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation
="vertical" android:layout_width="fill_parent"
android:layout_height
="fill_parent">
<ImageButton android:id="@+id/ibtnHead"
android:layout_height
="60px" android:layout_width="60px"
android:src
="@drawable/icon" android:scaleType="fitXY"></ImageButton>
</LinearLayout>

B:显示Gallery和ImageSwitcher的布局文件

ContractedBlock.gifExpandedBlockStart.gifView Code
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation
="vertical" android:layout_width="fill_parent"
android:layout_height
="fill_parent">
<Gallery android:id="@+id/img_gallery" android:layout_width="fill_parent"
android:layout_height
="110px" android:layout_marginTop="2px"
android:layout_alignParentLeft
="true"></Gallery>
<ImageSwitcher android:id="@+id/img_switcher"
android:layout_width
="90px" android:layout_height="90px"
android:layout_centerHorizontal
="true" android:layout_below="@+id/img_gallery"
></ImageSwitcher>
</RelativeLayout>

C:String文件

ContractedBlock.gifExpandedBlockStart.gifView Code
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="addContact_PleaseChooseImg">请选择图像</string>
</resources>

二、设置图片资源

在drawable-hdpi文件夹下放置10个要显示的图片,如下图

2011041212172251.jpg

三、主Activity类

ContractedBlock.gifExpandedBlockStart.gifView Code
package cn.moon.contact;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewGroup.LayoutParams;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.BaseAdapter;
import android.widget.Gallery;
import android.widget.ImageButton;
import android.widget.ImageSwitcher;
import android.widget.ImageView;
import android.widget.ImageView.ScaleType;
import android.widget.ViewSwitcher.ViewFactory;

public class AddContactActivity extends Activity {
ImageButton ibtnImgChoose;
AlertDialog imgChooseDialog;
Gallery gallery;
ImageSwitcher imageSwitcher;
int selectedImage;

private int[] images = { R.drawable.png0001, R.drawable.png0002,
R.drawable.png0003, R.drawable.png0004, R.drawable.png0005,
R.drawable.png0006, R.drawable.png0007, R.drawable.png0008,
R.drawable.png0009, R.drawable.png0010, };

public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.addcontact);
System.out.println(
"AddContact");
ibtnImgChoose
= (ImageButton) findViewById(R.id.ibtnHead);
ibtnImgChoose.setOnClickListener(
new View.OnClickListener() {
public void onClick(View v) {
initImageChoose();
imgChooseDialog.show();
}
});
}

private void initImageChoose() {
LayoutInflater layoutInflater
= LayoutInflater.from(this);
View view
= layoutInflater.inflate(R.layout.userheadchoose, null);
gallery
= (Gallery) view.findViewById(R.id.img_gallery);
gallery.setAdapter(
new imageAdapter(this));
gallery.setSelection(images.length
/ 2);
imageSwitcher
= (ImageSwitcher) view.findViewById(R.id.img_switcher);
imageSwitcher.setFactory(
new switcherFactory(this));
gallery.setOnItemSelectedListener(
new OnItemSelectedListener() {

public void onItemSelected(AdapterView<?> arg0, View arg1,
int arg2, long arg3) {
imageSwitcher.setImageResource(images[arg2]);
selectedImage
= arg2;
}

public void onNothingSelected(AdapterView<?> arg0) {
// TODO Auto-generated method stub

}
});
AlertDialog.Builder builder
= new AlertDialog.Builder(this);
builder.setTitle(
"请选择图像");
builder.setPositiveButton(
"确认", new OnClickListener() {

public void onClick(DialogInterface dialog, int which) {
ibtnImgChoose.setImageResource(images[selectedImage]);
}
});
builder.setNegativeButton(
"取消", new OnClickListener() {

public void onClick(DialogInterface dialog, int which) {

}
});
builder.setView(view);
imgChooseDialog
= builder.create();
}

class imageAdapter extends BaseAdapter {
private Context context;

public imageAdapter(Context context) {
super();
this.context = context;
}

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

public Object getItem(int arg0) {
// TODO Auto-generated method stub
return null;
}

public long getItemId(int position) {
// TODO Auto-generated method stub
return 0;
}

public View getView(int position, View convertView, ViewGroup parent) {
ImageView imageView
= new ImageView(context);// 构造一个ImageView
imageView.setImageResource(images[position]);// 设置ImageView图片源
imageView.setAdjustViewBounds(true);
imageView.setScaleType(ScaleType.FIT_XY);
// 自适应高和宽
imageView.setLayoutParams(new Gallery.LayoutParams(80, 80));// 设置显示图处的大小
imageView.setPadding(10, 5, 10, 5);// 设置四边的距离
return imageView;
}
}

class switcherFactory implements ViewFactory {
private Context context;

public switcherFactory(Context context) {
super();
this.context = context;
}

public View makeView() {
ImageView imageView
= new ImageView(context);
imageView.setLayoutParams(
new ImageSwitcher.LayoutParams(90, 90));
return imageView;
}

}
}

转载于:https://www.cnblogs.com/ycmoon/archive/2011/04/12/2013497.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/548962.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Windows7搭建FTP文件

Windows7搭建FTP文件 第一步&#xff1a;在任意一盘创建一个共享文件夹&#xff0c;这里我们把它命名为“ftp文件共享”&#xff0c;把需要共享的文件放里面&#xff0c;如图所示 第二步&#xff1a;安装IS组件 开始菜单→控制面板→程序→程序和功能→打开或关闭Windows功能…

Win7搭建http文件共享

Win7搭建http文件共享 作者&#xff1a;莫咸海 第一步&#xff1a;在除C盘以外的盘符中新建一个共享文件夹&#xff0c;命名为“http文件共享”&#xff1b; 将需要共享的文件放在“http文件共享”文件夹中。 第二步&#xff1a;安装IIS组件。开始菜单->控制面板->程序…

以命令方式从ftp服务器上下载和上传文件

** 以命令方式从ftp服务器上下载和上传文件 wang ** 1、“开始”→“运行”&#xff0c;输入“cmd“&#xff0c;打开命令提示符&#xff1b; 2、在命令提示符内输入”ftp“并回车&#xff0c;进入ftp提示符ftp> 3、在ftp>输入 open 192.168.2.5 回车&#xff1b; 如…

在windows环境下ftp服务器的文件上传和下载

在windows环境下ftp服务器的文件上传和下载 mo 一、上传本地文件 第一步&#xff1a;登录FTP服务器。在开始菜单中输入cmd&#xff0c;回车进入。输入ftp进入服务器&#xff0c;输入命令格式&#xff1a;open FTP服务器地址 端口&#xff0c;例如open 192.168.2.5 21 如果FTP端…

运维的未来之路:在技术革命中保持关键地位

在快速发展的IT界&#xff0c;运维工程师向来扮演着无可或缺的角色。他们不仅确保系统的平稳运行&#xff0c;还需要及时应对突发事件&#xff0c;优化各项技术实施。然而&#xff0c;伴随着技术的迭代和新工具的出现&#xff0c;一些人开始担忧35岁成为运维人员的职业半衰期。…

Ogre读取中文路径名的文件失败的解决办法

Ogre的文件读取是使用的标准库的io库读取的&#xff0c;众所周知的是&#xff0c;在vs2005是存在着bug的。因此想要一劳永逸的解决这个办法唯有去修改Ogre的源代码&#xff0c;以下为修改方法&#xff1a;打开OgreFileSystem.cpp文件&#xff0c;找到FileSystemArchive::open方…

硬盘类型的区分

硬盘接口类型的区分 1.IDE接口 IDE接口硬盘&#xff0c;IDE也称之为ATA接口&#xff0c;是一种比较老的接口硬盘&#xff0c;从刚开始生产至今&#xff0c;共推出了7个不同的版本&#xff0c;分别是&#xff1a;ATA-1 3.3MB/s、ATA-2 16.6MB/S、ATA-3 16.6MB/s、ATA-4 33MB/s…

bind配置文件解析

bind配置文件解析 bind作为一般的dns服务器的解析服务。 /etc/named.conf #bind的全局配置文件 /etc/named.rfc1912.zones #域配置文件 /var/named/ #存放zone&arpa文件 /var/log/messages #查看配置过程中出错信息 其中named.c…

tomcat配置多站点

下面关于TOMCAT6.0配置多站点的问题怎么解决&#xff1f; [互联网 Windows ] 收藏 转发至天涯微博 悬赏点数 10 3个回答 夏洛叶 2009-02-08 09:26:30 在F:\Tomcat 6.0\conf\server.xml配置是这样的,想同时启动5个站点, <Host name"bbb" debug"0" appB…

线程同步与异步套接字编程

1.利用事件对象来实现线程间的同步 新建一个win32 console application,取名Event,再建一个Event源文件&#xff0c;编辑&#xff1a; #include <iostream.h> #include <windows.h> DWORD WINAPI Fun1Proc(LPVOID lpParameter); DWORD WINAPI Fun2Proc(LPVOID lp…

电脑数据存储工具----光盘驱动器

作者&#xff1a;Liuweifei 电脑数据存储工具----光盘驱动器 光盘驱动器简称光驱&#xff0c;是电脑用来读写光盘内容的设备&#xff0c;也是在台式机和笔记本电脑里比较常见的一个硬件&#xff0c;随着移动存储设备的快速发展&#xff0c;光驱逐渐被其取代。 1. 光驱的类型…

认识和选购显卡

作者&#xff1a;Liuweifei 认识和选购显卡 显卡一般是一块独立的电路板&#xff0c;插在主板上接收由主机发出的控制显示系统工作的指令和显示内容的数字信号&#xff0c;然后通过输出模拟&#xff08;或数字&#xff09;信号控制显示器显示各种字符和图形&#xff0c;它和显…

多媒体融合通信平台促进公网和专网的互联互通

在发生诸如地震、洪涝灾害以及极端天气的情况下&#xff0c;由于通信设施和电力设施最容易遭到破坏&#xff0c;因此&#xff0c;在进行应急救援时&#xff0c;相关指挥部门最先想到的就是进行相应设施的抢修。 公网抢修成功&#xff0c;所有相关抢险救灾者都可以实现互相通话&…

ECMAScript 的未来:预测 JavaScript 创新的下一个浪潮

以下是简单概括关于JavaScript知识点以及一些目前比较流行的比如&#xff1a;es6 想要系统学习&#xff1a; 大家有关于JavaScript知识点不知道可以去 &#x1f389;博客主页&#xff1a;阿猫的故乡 &#x1f389;系列专栏&#xff1a;JavaScript专题栏 &#x1f389;ajax专栏&…

利用Visio 2007图形化项目进度和项目跟踪

课程类型 Microsoft Office Visio 2007 视频时长 120分钟 播放 课程资料 课程简介&#xff1a; 在进行项目管理时&#xff0c;项目经理将使用Microsoft Project对项目进行规划、资源分配、成本控制和项目状态跟踪。但是&#xff0c;项目中的数据如何能够通过更图形化的方式呈…

VRP 的发展

随着网络技术和应用的飞速发展&#xff0c;VRP 平台在处理机制、业务能力、产品支持等方面也在持续演进。由于平时也接触到了这几个版本的平台&#xff0c;也常不知道所以然&#xff0c;特找了些资料整理了一下。主要列举了VRP 发展历程中的几个主要版本。 VRP 发展历程 各版本…

PHP学习——定界符格式引起的错误

下面是一个错误的代码&#xff0c;能看出哪里出错了么&#xff1f;&#xff1f;对于我这个初学者什么都是蒙蒙懂的&#xff0c;真的无从下手&#xff0c;但是真的要自己尝试了才知道哪里错了&#xff0c;书和教程都不会告诉我哪里错了 错误代码&#xff1a;Parse error: syntax…

PHP之数组学习

对于网页编程来说&#xff0c;最重要的就是存取和读写数据了。存储方式可能有很多种&#xff0c;可以是字符串、数组、文件的形式等&#xff0c;今天学习了数组&#xff0c;可以说是PHP的数据应用中较重要的一种方式。PHP的数组函数众多&#xff0c;下面是我学习的小结&#xf…

mysql Error 1045(28000)

2019独角兽企业重金招聘Python工程师标准>>> 在windows操作系统安装mysql数据库&#xff0c;碰到Error 1045(28000) Access Denied for user rootlocalhost (Using password:NO)错误时&#xff0c;你需要重新设置密码。 具体方法是&#xff1a; 1.先在安装目录找到m…

给你的博客添加个看电影的频道

PPTV新推出一个Silverlight版PPTV在线剧场&#xff0c;里面电影电视剧和PPTV 软件端同步&#xff0c;只需安装Silverlight软件&#xff0c;即可在线观看。PPTV剧场版网址 为COOL.PPTV.COM &#xff0c;使用iframe代码&#xff0c;嵌入到页面中&#xff0c;给博客网站增加 一个在…