关闭

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

149人阅读 评论(0) 收藏 举报
分类:

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;
	}
}


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











0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:75940次
    • 积分:1770
    • 等级:
    • 排名:千里之外
    • 原创:103篇
    • 转载:15篇
    • 译文:4篇
    • 评论:18条
    最新评论