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 效果图

d8d595c8170e1a7da302e6fceac2df3b.gif

还是挺不错的;

3.3 布局实现

xmlns:tools="http://schemas.android.com/tools"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:orientation="vertical"

tools:context="${relativePackage}.${activityClass}" >

android:id="@+id/gallery1"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:layout_weight="1.02" />

android:id="@+id/imgswitch"

android:layout_width="match_parent"

android:layout_height="400dp" >

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://blog.csdn.net/lablenet/article/details/47978265

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐