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

当我们想要连续的观看多张图片的时候,动用Activity就太小题大做的,也不合适。我们需要的是一个能够一直换里面内容的一个容器就够了,ImageSwitcher就是这样的一个控件。
在介绍这个控件的使用实例之前,我们需要简单的介绍一下它。

在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的一个简单应用了。是不是很简单?不会别着急,我们把任务一点一点分解开来,然后再细致的去想,思考每一步要做的细节是什么,很容易就记下来了对不对。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值