Android-画廊实现 (Gallery , ImageSwitch)

1.回顾

上篇学习 SrcollView 和 ViewFlipper 的实现 图片轮播效果

2.重点

(1)Gallery 实现

(2)ImageSwitch实现

(3)Gallery 的 OnItemSelectedListener 实现

(4)ImageSwitch 的 ViewFactory 实现

(5)实现实例——Gallery实现缩略图,ImageSwitch实现 放大效果

3.实现

3.1 说明

Gallery 在 安卓4.0版本已经 过时了,建议使用 ScrollView水平视图实现或者 GridView实现;

虽说过时了,但是 还是可以使用的,使用起来比较简单;

3.2 效果图

还是挺不错的;

3.3 布局实现

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context="${relativePackage}.${activityClass}" >

    <Gallery
        android:id="@+id/gallery1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1.02" />

    <ImageSwitcher
        android:id="@+id/imgswitch"
        android:layout_width="match_parent"
        android:layout_height="400dp" >
    </ImageSwitcher>

</LinearLayout>

3.4 适配器实现

前面已经学过了 6 个 常用的适配器 :SimapleAdapter , ArrayAdapter ,BaseAdapter , PagerAdapter ,

FragmentPagerAdapter 和 FragmentStatePagerAdapter ;

其中 BaseAdapter 十分的灵活 ,易于 扩展;在此使用 BaseAdapter ; 这里就不解释了;

package com.example.adpater;

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 [] pics;
	private Context context;
	public ImageAdapter(int [] pics,Context context) {
		//初始化 数据源
		this.pics=pics;
		this.context=context;
	}

	@Override
	public int getCount() {
		// TODO Auto-generated method stub
		return Integer.MAX_VALUE;
	}

	@Override
	public Object getItem(int position) {
		// TODO Auto-generated method stub
		return pics[position];
	}

	@Override
	public long getItemId(int position) {
		// TODO Auto-generated method stub
		return position;
	}

	@Override
	public View getView(int position, View convertView, ViewGroup parent) {
		// Item 生成
		ImageView imageView=new ImageView(context);
		//设置资源
		imageView.setBackgroundResource(pics[position%pics.length]);
		//拉伸图片
		imageView.setScaleType(ScaleType.FIT_XY);
		//设置大小
		imageView.setLayoutParams(new Gallery.LayoutParams(200,100));

		return imageView;
	}

}

3.5 业务实现

(1)初始化 Gallary 和 imageswitch 控件

(2)准备数据源,在Drawable 中 粘贴 12张 图片,不要太大,否则报 内存溢出 错误

(3)绑定适配器

(4)设置Gallary OnItemSelectedListener  监听

(5)为 ImageSwitch 实现ViewFactory

package com.example.studydemo3;

import com.example.adpater.ImageAdapter;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.Gallery;
import android.widget.ImageSwitcher;
import android.widget.ImageView;
import android.widget.ImageView.ScaleType;
import android.widget.ViewSwitcher.ViewFactory;

public class MainActivity extends Activity {

	private Gallery gallery1;
	private ImageSwitcher imgswitch;

	// 准备数据源
	private int[] pics = { R.drawable.pic1, R.drawable.pic2, R.drawable.pic3,
			R.drawable.pic4, R.drawable.pic5, R.drawable.pic6, R.drawable.pic7,
			R.drawable.pic8, R.drawable.pic9, R.drawable.pic10, R.drawable.pic11,
			R.drawable.pic12};

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		gallery1 = (Gallery) findViewById(R.id.gallery1);
		imgswitch = (ImageSwitcher) findViewById(R.id.imgswitch);

		//绑定 适配器
		ImageAdapter imageAdapter=new ImageAdapter(pics, this);
		gallery1.setAdapter(imageAdapter);

		// 设置 viewFactory
		imgswitch.setFactory(new imgSwitchListener());

		// 设置监听事件
		gallery1.setOnItemSelectedListener(new galleryItemListener());

	}

	/**
	 * Gallery item 选择事件
	 *
	 * @author yuan
	 *
	 */
	class galleryItemListener implements OnItemSelectedListener {

		@Override
		public void onItemSelected(AdapterView<?> parent, View view,
				int position, long id) {
			// 使用这个
           imgswitch.setBackgroundResource(pics[position%pics.length]);
		}

		@Override
		public void onNothingSelected(AdapterView<?> parent) {
			// 没有使用

		}

	}

	// ImageSwitch 图片生产工厂
	class imgSwitchListener implements ViewFactory {

		@Override
		public View makeView() {
			// 返回 image
			ImageView imageView = new ImageView(MainActivity.this);
			// 使图片保持 原始比例大小 ,且中 显示
			imageView.setScaleType(ScaleType.FIT_CENTER);

			return imageView;
		}

	}

}

4. demo下载

http://download.csdn.net/detail/lablenet/9046019

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

时间: 2024-08-01 08:47:12

Android-画廊实现 (Gallery , ImageSwitch)的相关文章

Android 自学之画廊视图(Gallery)功能和用法

Gallery与之前讲的Spinner有共同的父类:AbsSpinner,表明Gallery和Spinner都是一个列表框.他们之间的区别在于Spinner显示的是一个垂直的列表框,而Gallery显示的是一个水平的列表框.Gallery与Spinner有一个区别:Spinner的作用是供用户选择,而Gallery则允许用户通过拖动来查看上一个.下一个列表项. Gallery常用的XML属性及相关方法 XML属性 相关方法 说明 android:animationDuration setAnim

Android实战简易教程-第十枪(画廊组件Gallery实用研究)

Gallery组件用于拖拽浏览图片,下面我们就来看一下如何实现. 一.实现Gallery 1.布局文件很简单: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/MyLayout" android:lay

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 ImageSwitcher和Gallery的使用

前几天,听说室友的老师要求他们做一个图片效果.其效果如下图所示(可左右滑动切换图片): 我当时晃眼一看,第一感觉好高级的样子.我还没做过这种效果呢,但室友说他们同学已经有人做出来了,我觉得既然有人做出来了,那么我也应该做出来,于是上个星期五的时候在教室研究了一下午,最后在网上找到了两个Demo都与这个效果类似但又不完全一样,果断下载下来研究研究,结果才发现其实这个效果并没有你想的那么难. 废话不多说,上代码: main.xml:(其实就是两个控件的使用ImageSwitcher和Gallery)

安卓--画廊(Gallery)组件

.xml代码如下: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" and

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之路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基础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 画廊效果之ViewPager显示多个图片

首先来看下面的效果: 从上面的图片可以看到,当添加多张图片的时候,能够在下方形成一个画廊的效果,我们左右拉动图片来看我们添加进去的图片,效果是不是好了很多呢?下面来看看怎么实现吧! 上面的效果类似Android里面ViewPage的效果,但是跟ViewPager有所不同,ViewPager每次只能显示一张图片. 其实我们是利用到了View的clipChildren属性,我们在这里要把ViewPager以及它的父窗体都设置为false,如下: android:clipChildren="false