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-10-05 20:01:13