Android ImageSwitcher和Gallery的使用

前几天,听说室友的老师要求他们做一个图片效果。其效果如下图所示(可左右滑动切换图片):

我当时晃眼一看,第一感觉好高级的样子。我还没做过这种效果呢,但室友说他们同学已经有人做出来了,我觉得既然有人做出来了,那么我也应该做出来,于是上个星期五的时候在教室研究了一下午,最后在网上找到了两个Demo都与这个效果类似但又不完全一样,果断下载下来研究研究,结果才发现其实这个效果并没有你想的那么难。

废话不多说,上代码:

main.xml:(其实就是两个控件的使用ImageSwitcher和Gallery)


<?xml version="1.0" encoding="utf-8"?>

<!-- 相对布局 -->

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<!-- 单个图片显示 -->
<ImageSwitcher
android:id="@+id/switcher"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
/>
<!-- 显示图片列表控件 -->
<Gallery
android:id="@+id/gallery"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_marginBottom="30dip" >
</Gallery>

</RelativeLayout>

创建一个新的JAVA文件galleryImage.java(并在清单文件中设置为默认):


public class galleryImage extends Activity {
private Gallery gallery;
ImageSwitcher imageSwitcher; // 声明ImageSwitcher对象,图片显示区域
public List<Map<String, Object>> list;
private int[] myImageIds = { R.drawable.i1, R.drawable.i2, R.drawable.i3,
R.drawable.i4 };

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.main);
Init();

}

/**
* 初始化
*/
public void Init(){
// 通过控件的ID获得imageSwitcher的对象
imageSwitcher = (ImageSwitcher) findViewById(R.id.switcher);
// 设置自定义的图片显示工厂类
imageSwitcher.setFactory(new MyViewFactory(this));

Animation();
/*adapter = new SwitchereAdapter(this);
adapter.createReflectedImages(); // 创建倒影效果
gallery.setAdapter(adapter);*/
gallery = (Gallery) findViewById(R.id.gallery);
gallery.setAdapter(new ImageAdapter(this));
gallery.setOnItemSelectedListener(new OnItemSelectedListener() {

@Override
public void onItemSelected(AdapterView<?> parent, View view,
int position, long id) {
// 通过求余数,循环显示图片

imageSwitcher.setImageResource(myImageIds[position
% myImageIds.length]);
}

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

}

});
}

public void ChangeScale(){

}

/**
* 动画效果
*/
public void Animation() {
// 设置ImageSwitcher组件显示图像的动画效果
imageSwitcher.setInAnimation(AnimationUtils.loadAnimation(this,
android.R.anim.fade_in));
imageSwitcher.setOutAnimation(AnimationUtils.loadAnimation(this,
android.R.anim.fade_out));
}

/**
* Gallery的图片适配器
* @author AF74776
*
*/
public class ImageAdapter extends BaseAdapter {
// 声明一个变量
int mGalleryItemBackGround;
private Context mContext;

public ImageAdapter(Context c) {
mContext = c;
// 实用布局文件中的Gallery属性
TypedArray a = obtainStyledAttributes(R.styleable.Gallery);
// 取得gallery属性饿index id
mGalleryItemBackGround = a.getResourceId(
R.styleable.Gallery_android_galleryItemBackground, 0);
// 让对象的styleable属性能反复实用
a.recycle();
}

public int getCount() {// 返回数组长度
// TODO Auto-generated method stub
return Integer.MAX_VALUE;
}

public Object getItem(int position) {
return position;
}

public long getItemId(int position) {// 得到图片ID
return position;
}

public View getView(int position, View converView, ViewGroup parent) {
ImageView i = new ImageView(mContext);
// i.setImageResource(myImageIds[position %myImageIds.length ]);
i.setImageResource(myImageIds[position % myImageIds.length]);
i.setAdjustViewBounds(true); // 图片自动调整显示
i.setScaleType(ImageView.ScaleType.FIT_XY);// 重新设置图片的宽高
i.setLayoutParams(new Gallery.LayoutParams(200, 200));// 设置layout的宽高
i.setBackgroundResource(mGalleryItemBackGround);// 设置背景
return i;// 返回对象
}

}

// 自定义图片显示工厂类,继承ViewFactory

class MyViewFactory implements ViewFactory {

private Context context; // 定义上下文

// 参数为上下文的构造方法

public MyViewFactory(Context context) {

this.context = context;

}

// 显示图标区域

public View makeView() {

ImageView iv = new ImageView(context); // 创建ImageView对象

iv.setScaleType(ImageView.ScaleType.FIT_CENTER); // 图片自动居中显示

// 设置图片的宽和高

iv.setLayoutParams(new ImageSwitcher.LayoutParams(
400, 400));

return iv; // 返回ImageView对象

}
}
}

代码中有详细的注释,我觉得我都能看懂(自认为自己比较笨),相信大家也一定能看懂。

Android ImageSwitcher和Gallery的使用,码迷,mamicode.com

时间: 2024-12-15 09:25:58

Android ImageSwitcher和Gallery的使用的相关文章

Android -- ImageSwitch和Gallery 混合使用

1. 实现效果 2. 实现代码 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent

从零开始学android&lt;ImageSwitcher图片切换组件.二十六.&gt;

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

Android学习之-----Gallery

在Android中,画廊控件Gallery用来显示图片列表,可以用手指直接拖动图片左右移动.Gallery只能水平显示一行,且Gallery列表中的图片会根据不同的拖动情况向左或向右移动,直到显示到最后一个图片为止 1.XML布局 1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 2 xmlns:tools="http://schemas.android.com/tool

Android中实现Gallery 点击放大

图片放大的思路: 第一.可以通过Matrix对象来变换图像,在选择的时候放大,在失去焦点的时候,缩小到原来的大小. double scale = 1.2;int width = bm.getWidth();int height = bm.getHeight();Log.i("size:", width+"");float scaleWidth = (float)(scale*width);float scaleHeight = (float)(scale*heigh

Android ImageSwitcher

要想让ImageSwitcher显示图片,需要为ImageSwitcher提供一个View,使用ImageSwitcher对象的setFactory方法. switcher.setFactory(new ViewSwitcher.ViewFactory() { @Override public View makeView() { return new ImageView(AtyImageSwitcher.this); } }); 可以为ImageSwitcher设置图片进入和退出的效果,使用se

Android基础TOP6_2:Gallery +Image完成画廊

Activity: 1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 2 xmlns:tools="http://schemas.android.com/tools" 3 android:layout_width="match_parent" 4 android:layout_height="match_parent" 5

android之路Gallery 画廊

Gallery是一个内部元素能够水平滚动,而且能够把当前选择的子元素定位在它中心的布局组件. 我们还是直接看看样例的执行效果. 1.新疆项目HelloGallery 2.把须要展示的图片放入res/drawable文件夹.woman01.jpg.woman02.jpg,woman03.jpg 3.res/layout/activity_main.xml文件的内容例如以下: <FrameLayout xmlns:android="http://schemas.android.com/apk/

Android源代码之Gallery专题研究(1)

前言 时光飞逝,从事Android系统开发已经两年了,总想写点什么来安慰自己.思考了非常久总是无法下笔,认为没什么好写的.如今最终决定写一些符合大多数人需求的东西,想必使用过Android手机的人们一定对"图库"(下面简称Gallery)这个应用非常熟悉.在Android市场里面有各种关于图库的应用,他们的最初原型事实上就是Android系统原生"图库",仅仅是做了不同的差异化而已(UI差异化).在研究Gallery源代码之前,我们须要对设计模式有一定的了解,依据自

Android源代码之Gallery专题研究(2)

引言 上一篇文章已经解说了数据载入过程,接下来我们来看一看数据载入后的处理过程.依照正常的思维逻辑.当数据载入之后,接下来就应该考虑数据的显示逻辑. MVC显示逻辑 大家可能对J2EE的MVC架构比較熟悉,Gallery2和MVC有什么关系呢,简直是瞎扯???首先,我们先回顾一下软件设计思想以及设计原则(详细请參考http://blog.csdn.net/cdl2008sky/article/details/6364396),简单的概括就是 紧内聚.松耦合.分层.最后再来解释一下MVC思想.MV