Android入门(36)——第十三章 使用Gallery和ImageSwitcher制作图片浏览器

原创 2015年07月08日 20:50:14

1. 简介:


2. 案例一:


BaseAdapter中的重要方法:


第一步:创建布局文件main:添加一个Galler控件:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >
    
    <Gallery 
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/gallery"
        />

</LinearLayout>
第二步:创建一个自己的适配器,叫imageAdapter。

package com.example.gallery_imageswitch;

import android.content.Context;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Gallery;
import android.widget.ImageView;
import android.widget.ImageView.ScaleType;

public class imageAdapter extends BaseAdapter{

	private int[] res;
	private Context context;
	
	// 构造函数,用来接收参数的。
	public imageAdapter(int[] res,Context context){
		this.res = res;
		this.context = context;
	}
	
	// 返回数据源的数量,为了让它循环的无限的滑动,将返回值设置成一个最大的数
	@Override
	public int getCount() {
		// TODO Auto-generated method stub
		//return res.length;
		return Integer.MAX_VALUE;
	}

	// 返回Object对象
	@Override
	public Object getItem(int arg0) {
		// TODO Auto-generated method stub
		return res[arg0];
	}

	// 返回Id
	@Override
	public long getItemId(int arg0) {
		// TODO Auto-generated method stub
		return arg0;
	}

	// 取得每一个Item的视图的对象,例如我们的数据源中有十个图片,那么该函数就会被调用十次。
	@Override
	public View getView(int position, View convertView, ViewGroup parent) {
		// TODO Auto-generated method stub
		ImageView image = new ImageView(context);
		// 因为无限循环,position无限大,所以这里需要一个求余的处理。
		image.setBackgroundResource(res[position%res.length]);
		// 这里重新设置参数宽高。
		image.setLayoutParams(new Gallery.LayoutParams(400, 300));
		// 设置缩放模式
		image.setScaleType(ScaleType.FIT_XY);
		return image;
	}
}

第三步:创建活动文件MainActivity:

package com.example.gallery_imageswitch;

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.widget.ArrayAdapter;
import android.widget.Gallery;
import android.widget.SimpleAdapter;

public class MainActivity extends Activity {

	// 准备数据源
	private int[] res = { R.drawable.ic_launcher, R.drawable.ic_launcher,
			R.drawable.ic_launcher, R.drawable.ic_launcher,
			R.drawable.ic_launcher, R.drawable.ic_launcher,
			R.drawable.ic_launcher, R.drawable.ic_launcher,
			R.drawable.ic_launcher, R.drawable.ic_launcher };
	
	private Gallery gallery;
	
	// 准备适配器。今天我们自己继承BaseAdapter来实现一个适配器,不用系统自带的下面的这两个:
	// ArrayAdapter<String> adapter;
	// SimpleAdapter adapter;
	// 好处是灵活度和自由性更大。
	private imageAdapter adapter;
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		
		gallery = (Gallery) findViewById(R.id.gallery);
		// 适配器实例化:
		adapter = new imageAdapter(res, this);
		// 让galler加载适配器
		gallery.setAdapter(adapter);
		
	}
}
效果图:

<img src="http://img.blog.csdn.net/20150708214251172" alt="" />


3. 案例二:设置监听器:onItemSeleted监听器可以用来监听Gallery当前选中的图片:

ImageSwitcher介绍:



第一步:改写main布局文件:添加一个ImageSwitcher控件:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <Gallery
        android:id="@+id/gallery"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

    <ImageSwitcher
        android:id="@+id/is"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" >
    </ImageSwitcher>

</LinearLayout>
第二步:改写自定义适配器imageAdapter文件:额,好像没有改。

package com.example.gallery_imageswitch;

import android.content.Context;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Gallery;
import android.widget.ImageView;
import android.widget.ImageView.ScaleType;

public class imageAdapter extends BaseAdapter{

	private int[] res;
	private Context context;
	
	// 构造函数
	public imageAdapter(int[] res,Context context){
		this.res = res;
		this.context = context;
	}
	
	// 返回数据源的数量,为了让它循环的无限的滑动,将返回值设置成一个最大的数
	@Override
	public int getCount() {
		//return res.length;
		return Integer.MAX_VALUE;
	}

	// 返回Object对象
	@Override
	public Object getItem(int arg0) {
		// TODO Auto-generated method stub
		return res[arg0];
	}

	// 返回Id
	@Override
	public long getItemId(int arg0) {
		// TODO Auto-generated method stub
		return arg0;
	}

	// 取得每一个Item的视图的对象,例如我们的数据源中有十个图片,那么该函数就会被调用十次。
	@Override
	public View getView(int position, View convertView, ViewGroup parent) {
		// TODO Auto-generated method stub
		ImageView image = new ImageView(context);
		// 因为无限循环,position无限大,所以这里需要一个求余的处理。
		image.setBackgroundResource(res[position%res.length]);
		// 这里重新设置参数宽高。
		image.setLayoutParams(new Gallery.LayoutParams(200, 150));
		// 设置缩放模式
		image.setScaleType(ScaleType.FIT_XY);
		return image;
	}

}
第三步:改写活动文件MainActivity:用ViewFactory视图工厂,

package com.example.gallery_imageswitch;


import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.ArrayAdapter;
import android.widget.Gallery;
import android.widget.ImageSwitcher;
import android.widget.ImageView;
import android.widget.ImageView.ScaleType;
import android.widget.SimpleAdapter;
import android.widget.ViewSwitcher.ViewFactory;


// ViewFactory视图工厂,为了ImageSwitcher添加图片增加的
public class MainActivity extends Activity implements OnItemSelectedListener,ViewFactory{


	// 准备数据源
	private int[] res = { R.drawable.ic_launcher, R.drawable.ic_launcher,
	R.drawable.ic_launcher, R.drawable.ic_launcher,
	R.drawable.ic_launcher, R.drawable.ic_launcher,
	R.drawable.ic_launcher, R.drawable.ic_launcher,
	R.drawable.ic_launcher, R.drawable.ic_launcher };

	private Gallery gallery;
	private ImageSwitcher is;
	
	// 准备适配器。今天我们自己继承BaseAdapter来实现一个适配器,不用系统自带的下面的这两个:
	// ArrayAdapter<String> adapter;
	// SimpleAdapter adapter;
	// 好处是灵活度和自由性更大。
	private imageAdapter adapter;
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		
		gallery = (Gallery) findViewById(R.id.gallery);
		is = (ImageSwitcher) findViewById(R.id.is);
		// 适配器实例化:
		adapter = new imageAdapter(res, this);
		// 让galler加载适配器
		gallery.setAdapter(adapter);
		// 让galler加载监听器
		gallery.setOnItemSelectedListener(this);
		// 让ImageSwitcher加载工厂
		is.setFactory(this);
		// 设置ImageSwitcher的动画效果,淡入淡出的效果
		is.setInAnimation(AnimationUtils.loadAnimation(this, android.R.anim.fade_in));
		is.setInAnimation(AnimationUtils.loadAnimation(this, android.R.anim.fade_out));
	}


	@Override
	public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2,long arg3) {
		//image.setBackgroundResource(res[position%res.length]);
		// 点击以后这里改变的是is的背景图数据
		is.setBackgroundResource(res[arg2 % res.length]);
	}


	@Override
	public void onNothingSelected(AdapterView<?> arg0) {
	}


	@Override
	public View makeView() {
		ImageView image = new ImageView(this);
		// 又是一种缩放模式,可以按照比例缩放图片
		image.setScaleType(ScaleType.FIT_CENTER);
		return image;
	}
}


效果图:可能是图一样的缘故,下面感受不到图片的变化:











版权声明:本文为博主原创文章,未经博主允许不得转载。

使用Gallery和ImageSwitcher制作图片浏览器

代码 package com.example.gallery_imageviewswitcher; import android.os.Bundle; import android.support...
  • mp624183768
  • mp624183768
  • 2017年06月26日 00:23
  • 110

Android利用Gallery和ImageSwitcher实现在线相册图片预览功能(异步加载图片)

Android利用Gallery和ImageSwitcher实现在线相册图片预览功能(异步加载图片)
  • WanTianwen
  • WanTianwen
  • 2014年04月14日 16:27
  • 8531

【Android】图片切换组件ImageSwitcher的运用

类的继承关系 [java] view plaincopy java.lang.Object   android.view.View                   andro...
  • Leaning_wk
  • Leaning_wk
  • 2015年10月17日 11:18
  • 585

Android中ImageSwitcher结合Gallery展示SD卡中的资源图片

本文主要是写关于ImageSwitcher结合Gallery组件如何展示SDCard中的资源图片,相信大家都看过API Demo 中也有关于这个例子的,但API Demo 中的例子是展示工程中Draw...
  • dongdong230
  • dongdong230
  • 2014年03月05日 00:49
  • 754

利用Gallery和ImageSwitcher实现在线相册图片预览功能(异步加载图片)

Android利用Gallery和ImageSwitcher实现相册功能(异步加载图片) MainActivity.java [java] view plaincopy ...
  • shotaSu
  • shotaSu
  • 2016年01月28日 15:42
  • 644

Android 基于ImageSwitcher实现的左右切换图片

左右切换图片控件大家都用ViewPager, ViewFipper比较多吧,我之前也用ViewPager实现了,使用ViewPager实现左右循环滑动图片,有兴趣的可以去看下,今天介绍的是基于Imag...
  • xiaanming
  • xiaanming
  • 2013年05月29日 10:52
  • 48989

这个界面怎么实现,ImageSwitcher中每个图片居中,上下黑的

                                                                     zgf1991 于 2012-6-11 14:18 ...
  • yuanyuan_186
  • yuanyuan_186
  • 2014年08月14日 18:40
  • 788

android 让gallery中图片默认居左显示

最近项目中有用到gallery,要求默认是在最左边显示出来的,也试过 gallery.setSelection(position) ;但是对于初始状态没有图片的话,就不能这样用了,最后想到一个办法是设...
  • tiangaopan
  • tiangaopan
  • 2016年10月24日 23:08
  • 1279

Android 基于ImageSwitcher实现的左右切换图片

左右切换图片控件大家都用ViewPager, ViewFipper比较多吧,我之前也用ViewPager实现了,使用ViewPager实现左右循环滑动图片,有兴趣的可以去看下,今天介绍的是基于Imag...
  • jdsjlzx
  • jdsjlzx
  • 2015年01月05日 14:16
  • 1080

Gallery实现图片文字左右滑动

明天周六了,又可以睡懒觉了 毕业快五个月了,进入社会的赶脚就是不一样,事实证明,我很倔强,倔强到别人很难改变我,我只做我喜欢的事情,这段时间静下来学习,感觉挺好,大学都没这个认真过,因为有梦想,所以...
  • ElinaVampire
  • ElinaVampire
  • 2014年11月21日 15:14
  • 2615
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android入门(36)——第十三章 使用Gallery和ImageSwitcher制作图片浏览器
举报原因:
原因补充:

(最多只允许输入30个字)