Gallery是制作一个类似于一个画廊的Android控件,但是早已经被Android弃用了,被ViewPager等控件所替代,但还是有他自己独特的地方。ImageSwitcher是类似于图片切换工具。
首先是在layout布局文件中声明两个控件:
<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="match_parent"
android:layout_margin="10dp" >
</ImageSwitcher>
当然,还要做好准备工作,寻找图片,准备数据源。并且声明以上两个控件,并且初始化。
// 准备数据源
private int[] res = { R.drawable.item1, R.drawable.item2, R.drawable.item3, R.drawable.item4, R.drawable.item5,
R.drawable.item6, R.drawable.item7, R.drawable.item8, R.drawable.item9, R.drawable.item10, R.drawable.item11,R.drawable.item12};
private Gallery gallery;
private ImageSwitcher iSwitcher;
gallery = (Gallery) findViewById(R.id.gallery);
iSwitcher=(ImageSwitcher) findViewById(R.id.is);
然后就是新建一个适配器(BaseAdapter)
package com.example.gallery;
import android.content.Context;
import android.util.Log;
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) {
// TODO Auto-generated constructor stub
this.res=res;
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 res[position];
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
Log.e("Main", "position="+position+"\t "+"res的角标="+position%res.length);
ImageView imageView=new ImageView(context);
imageView.setBackgroundResource(res[position%res.length]);//图像资源
imageView.setLayoutParams(new Gallery.LayoutParams(400,300));//设置宽高
imageView.setScaleType(ScaleType.FIT_XY);//显示模式,横向拉伸
return imageView;
}
}
res[position%res.length]:是使其图片可以循环滑动
package com.example.gallery;
import android.support.v7.app.ActionBarActivity;
import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
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 implements OnItemSelectedListener,ViewFactory{
// 准备数据源
private int[] res = { R.drawable.item1, R.drawable.item2, R.drawable.item3, R.drawable.item4, R.drawable.item5,
R.drawable.item6, R.drawable.item7, R.drawable.item8, R.drawable.item9, R.drawable.item10, R.drawable.item11,R.drawable.item12};
private Gallery gallery;
private ImageSwitcher iSwitcher;
private ImageAdapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
gallery = (Gallery) findViewById(R.id.gallery);
iSwitcher=(ImageSwitcher) findViewById(R.id.is);
//传参到适配器
adapter=new ImageAdapter(res, this);
//加载适配器
gallery.setAdapter(adapter);
//gallery的点击事件
gallery.setOnItemSelectedListener(this);
iSwitcher.setFactory(this);
iSwitcher.setInAnimation(AnimationUtils.loadAnimation(this, android.R.anim.fade_in));//android自带动画淡入效果
iSwitcher.setOutAnimation(AnimationUtils.loadAnimation(this, android.R.anim.fade_out));//android自带动画淡出效果
}
//设置ImageSwitcher的属性
@Override
public View makeView() {
// TODO Auto-generated method stub
ImageView imag=new ImageView(this);
imag.setScaleType(ScaleType.FIT_CENTER);//等比例图片居中显示
return imag;
}
@Overridepublic void onItemSelected(AdapterView<?> parent, View view, int position, long id) {// TODO Auto-generated method stub//imageView.setBackgroundResource(res[position%res.length]);iSwitcher.setBackgroundResource(res[position%res.length]);//ImageSwitcher随gallery的改变而改变//gallery的点击事件
}@Overridepublic void onNothingSelected(AdapterView<?> arg0) {// TODO Auto-generated method stub}}