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功能…

nagios整合cacti2011版(五)

Nagios使用NSClient监控远程Windows主机下载NSClient-Win32-0.3.8.msi并安装。http://files.nsclient.org/x-0.3.x/NSClient-0.3.8-Win32.msi到安装目录打开NSC.ini文件进行修改&#xff1a;在[modules]模块&#xff0c;将除CheckWMI.dll和RemoteConfiguration.dll外的所有dll文…

Win7搭建http文件共享

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

大数运算(续)

ACM竞赛中另一个基础运算&#xff0c;大数的阶乘(factorial)&#xff0c;其实阶乘中要算超出int表示范围的阶乘这是个十分浩瀚的工程&#xff0c;其实就是很多个大数先乎乘积再求和。 真不敢想象一个位数超过百位的数字&#xff0c;它的阶乘&#xff0c;这个目前不考率&#xf…

Visualbox中linux的网络配置

在visualbox中刚装好虚拟机后&#xff0c;默认没有配置eth0&#xff0c;所以用putty工具无法连接上虚拟机中的系统。 配置eth0的方法如下&#xff1a; 用vim打开eth0的配置文件&#xff1a;/etc/sysconfig/network-scripts/ifcfg-eth0 将以下内容拷入此配置文件中 DEVICE"…

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

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

使用Html.DropDownList

在MVC项目中&#xff0c;需要使用DropDownList绑定Model数据。 目前使用的方法&#xff1a; 先定义SelectListItem的list类型 <%var VisitCaselist newList<SelectListItem>() { (newSelectListItem() { Text "空", Value "空", Selectedtrue}),…

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

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

GPCC安装以及踩坑经历

gpcc安装以及踩坑经历 官方下载地址文档 https://network.pivotal.io/products/pivotal-gpdb#/releases/29190安装开始之前 chown gpadmin:gpadmin /usr/local 安装完成之后 chown root:root /usr/local添加访问权限 vim /opt/greenplum/data/master/gpseg-1/pg_hba.conflo…

net自带二进制序列化,XML序列化和ProtoBuf序列化的压缩对比

测试结果&#xff1a;ProtoBuf Length:115BinaryFormatter Length:1177XmlSerializer Length:814xml length:825做了一个各种序列化方案的压缩比例测试&#xff0c;可以看到protobuf序列化后的大小是xml原始格式的8分之一&#xff0c;是xml序列化后的8分之一&#xff0c;是二进…

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

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

Metrics_collector还没有添加到共享预加载库(shared_preload_libraries)中

gpcc踩坑 本文最大的锅&#xff0c;最大的坑来了 安装完成之后会报以下错误&#xff01;你可以完全忽略错误的解决过程直接跳到最后&#xff01; Metrics_collector还没有添加到共享预加载库(shared_preload_libraries)中。请添加它以启用指标收集。详见文档。 error alert …

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

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

perl调用shell

1 systemperl也可以用system调用shell的命令,它和awk的system一样,返回值也是它调用的命令的退出状态.如果向system传递一个字符串作参数,则perl会调用shell来执行这个命令,在这个字符串内也就不可以有perl 的变量了;如果传递多个字符串作参数,则perl会自己执行这个命令,且可以…

硬盘类型的区分

硬盘接口类型的区分 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…

Linux Software RAID的rebuild速度。

Linux Software RAID的rebuild速度是根据服务器负载情况自动调节的&#xff0c;默认的rebuild比较慢。默认的速度一般如下&#xff1a; [rootx003 ~]# sysctl dev.raid.speed_limit_min dev.raid.speed_limit_min 1000这个默认速度下&#xff0c;Rebuild一块1T的硬盘好好几天时…

bind配置文件解析

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

硬盘结构

作者&#xff1a;Liuweifei 硬盘结构 1.硬盘结构 ​ 硬盘大致由盘片、读写头&#xff08;磁头&#xff09;、马达、底座、电路板等几大项组合而成。 ​ 硬盘的每一个盘片都有两个盘面&#xff0c;即上、下盘面。每个盘面都能利用&#xff0c;都可以存储数据&#xff0c;成为…

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…

认识和选购极致画质的显示器

作者&#xff1a;Liuweifei 认识和选购极致画质的显示器 显示器是电脑输出数据的主要硬件设备&#xff0c;它是一种电光转换工具&#xff0c;现在市面上的显示器都是LCD&#xff08;Liquid Crystal Display&#xff0c;液晶显示器&#xff09;显示器&#xff0c;它具有无辐射…