您的位置:首页 > 移动开发 > Android开发

android学习笔记——ImageSwitcher控件(图片切换器)

2015-12-10 21:29 435 查看
当我们想要连续的观看多张图片的时候,动用Activity就太小题大做的,也不合适。我们需要的是一个能够一直换里面内容的一个容器就够了,ImageSwitcher就是这样的一个控件。
ImageSwitcher控件详解:http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2013/0305/966.html
在介绍这个控件的使用实例之前,我们需要简单的介绍一下它。

在Android中,可以通过使用图片切换控件ImageSwitcher来实现浏览多张图片的功能。
要将图片显示在ImageSwitcher控件中,必须为ImageSwitcher类设置一个ViewFactory,用来将显示的图片和父窗口区分开来。这可以通过如下方法来实现:mImageSwitcher.setFactory();

此外,我们还需要实现ViewSwitcher.ViewFactory接口中的makeView()抽象方法,通过该方法可以返回一个ImageView对象,所有图片都将通过该ImageView对象来进行显示。
public View makeView() {

return new ImageView(this);

}

向ImageSwitcher加载图片的方式:
(1)public void setImageDrawable(Drawable drawable); 通过Drawable对象来获取图片资源;

(2)public void setImageResource(int resid); 通过图片资源Id来获取图片资源;

(3)public void setImageURI(Uri uri); 通过图片的Uri路径来获取图片资源。

好了好了,介绍这么多就够了,下面我们用一个实例来具体的讲解一下ImageSwitcher该怎么用。
还记得上一节的GridVIew么,这次我们就给item来个点击看大图,还可以看上一张下一张。
列个要做哪些事:
1.在item的点击中设置Intent,而且要传入该图片的位置信息,方便之后显示
2.给这个Activity写好xml布局,一个ImageSwitcher,一个Button_pre,一个Button_next
3.在DisplayActivity.java中做好图片内容设置(就是ImageSwitcher的具体用法了)

明白要干什么了,我们就开始吧。

//给GridView设置item的点击事件

gvImage.setOnItemClickListener(new AdapterView.OnItemClickListener() {

@Override

public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
// Toast.makeText(MainActivity.this,""+images[position],Toast.LENGTH_LONG).show();
Intent intent = new Intent(MainActivity.this,DisplayActivity.class);
//相信大家对Intent已经不陌生了。用显式调用就ok
intent.putExtra("position",position); //你要知道点了哪个,所以要传入这个position这个值啊

startActivity(intent);

}
});

我们来看看xml是怎么写的:

<?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">

<ImageSwitcher

android:id="@+id/imageSwitcher1"

android:layout_width="match_parent"

android:layout_height="fill_parent"

android:layout_above="@+id/linear"

android:layout_alignParentLeft="true"

android:layout_alignParentTop="true">

</ImageSwitcher>

<LinearLayout

android:id="@+id/linear"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:layout_alignParentBottom="true">

<Button

android:id="@+id/btn_pre"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_weight="1"

android:layout_marginLeft="32dp"

android:onClick="displayPrevious"

android:text="上一张"/>

<Button

android:id="@+id/btn_next"

android:layout_marginRight="34dp"

android:onClick="displayNext"

android:text="下一张"

android:layout_weight="1"

android:layout_width="wrap_content"

android:layout_height="wrap_content" />

</LinearLayout>

</RelativeLayout>
没什么难的,一个ImageSwitcher,俩Button,在Button里面设置了一下点击事件,这个点击的活动方法一会在DisplayActivity.java中写出来。

再来看看最重要的步骤吧。
这里我们就需要用到本篇开头介绍的ImageSwitcher的使用方法了。
先把要做的事情先列一下:
1.获取到xml布局中的ImageSwitcer控件
2.给isImages设置工厂方法.setFactory((ViewSwitcher.ViewFactory)this);这个方法就是要给ImageSwitcher这个控件中加入ImageView这样的内容,方便切换。这里需要重写一个方法View makeView(){return imageView}
3.得到传入该Activity的参数(点击这个图片时要传入该图片的position)
4.数据源需要用到,在这里初始化了。
5.给ImageSwitcher设置数据源isImage.setImageResource(images[currentPosition]);
6.写一下两个button的点击触发方法。一个displayPrevious(View view) 一个displayNext(View view)方法。改变图片的方式就是增加/减少currentPosition,然后设置ImageResource
好了,下面看具体的代码吧。

public class DisplayActivity
extends Activity
implements ViewSwitcher.ViewFactory {
//注意这里该Activity需要实现ViewFactory这个接口中的一些方法,就是下面我们要用到的makeView这个方法

//声明一个图片切换器

private ImageSwitcher
isImages;

//记录当前显示的第几张图片,是一个数组的索引

private int
currentPosition;

int[]
images;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_display);

//初始化切换器

isImages = (ImageSwitcher) findViewById(R.id.imageSwitcher1);

//给切换器加一个factory 可以把它看成是一个容器

isImages.setFactory((ViewSwitcher.ViewFactory)
this);

//当前显示的图片的索引就是从intent传过来的附加信息,我们通过getIntExtra得到他

currentPosition = getIntent().getIntExtra("position",0);

images =
new int[]{

R.mipmap.image1,R.mipmap.image2,R.mipmap.image3,

R.mipmap.image4,R.mipmap.image5,R.mipmap.image6,

R.mipmap.image7,R.mipmap.image8,R.mipmap.image9,

R.mipmap.image1,R.mipmap.image2,R.mipmap.image3,

R.mipmap.image4,R.mipmap.image5,R.mipmap.image6,

R.mipmap.image7,R.mipmap.image8,R.mipmap.image9

};

//给图片切换器设置图片

isImages.setImageResource(images[currentPosition]);

}

/**

* 显示上一张图片

* 给图片索引做一个--的动作,判断当当前值小于0时,给它提示当前为第一张。

*/

public void displayPrevious(View view){

currentPosition--;

if(currentPosition<0){

Toast.makeText(this,"已经是第一张图片了",Toast.LENGTH_SHORT).show();

currentPosition =
0;

}

isImages.setImageResource(images[currentPosition]);

}

/**

* 显示下一张图片

* 给图片索引做一个++操作,判断当 当前值大于最后一张时,提示它为最后一张

*/

public void displayNext(View view){

currentPosition++;

if(currentPosition>images.length-1){

Toast.makeText(this,"已经是最后一张图片了",Toast.LENGTH_SHORT).show();

currentPosition =
images.length-1;

}

isImages.setImageResource(images[currentPosition]);

}

/**完成ViewFactory接口的时候,必须要重写的方法makeView

* 他的作用是返回来一个ImageView对象,同来显示选中的图片。

* 我们需要给他设置一些属性,例如,设置布局等等。

*/

@Override

public View makeView() {

ImageView imageView = new ImageView(this);

imageView.setLayoutParams(new ImageSwitcher.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));

return imageView;

}
}
好了,以上就是ImageSwitcher的一个简单应用了。是不是很简单?不会别着急,我们把任务一点一点分解开来,然后再细致的去想,思考每一步要做的细节是什么,很容易就记下来了对不对。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: