一.ImageSwitcher(圖片切換器):
當我們想點擊一張圖片時,想讓它出現的不太突然,想要緩慢顯示,這時Gallery視圖就需要ImageSwitcher來配合使用。
其中我們還需要用到ViewFactory介面,這是一個視圖轉換器,我們要重寫makeView()方法,來建立一個用於添加到視圖轉換器(ViewSwitcher)中的新視圖。
動畫效果:
由左向右滑入的效果:
android.R.anim.slide_in_left
android.R.anim.slide_out_right
淡入淡出:
android.R.anim.fade_in
android.R.anim.fade_out
示範執行個體:
布局檔案:
自訂屬性(attrs.xml):
主要代碼:
public class MainActivity extends Activity implements ViewFactory {Integer[] imgId = {R.drawable.img1,R.drawable.img2,R.drawable.img3,R.drawable.img4,R.drawable.img5,R.drawable.img8,R.drawable.img9,};private ImageSwitcher is ; @Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);is = (ImageSwitcher)findViewById(R.id.imageSwitcher1);is.setFactory(this);//設定動畫效果。由左向右滑入is.setInAnimation(AnimationUtils.loadAnimation(this, android.R.anim.slide_in_left));is.setOutAnimation(AnimationUtils.loadAnimation(this, android.R.anim.slide_out_right));Gallery gallery = (Gallery)findViewById(R.id.gallery1);gallery.setAdapter(new ImageAdapter(this));gallery.setOnItemClickListener(new OnItemClickListener() {@Overridepublic void onItemClick(AdapterView arg0, View arg1, int arg2,long arg3) { is.setImageResource(imgId[arg2]);}});}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {getMenuInflater().inflate(R.menu.main, menu);return true;} //建立一個新的View來添加到ImageView中。@Overridepublic View makeView() { ImageView imageView = new ImageView(this); //設定背景顏色 imageView.setBackgroundColor(0xffffff00); imageView.setScaleType(ImageView.ScaleType.FIT_CENTER); //填充控制項。 imageView.setLayoutParams(new ImageSwitcher.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT)); return imageView;} //Image適配器類,綁定Gallery。private class ImageAdapter extends BaseAdapter{private Context context;private int item;public ImageAdapter(Context context) {this.context = context;TypedArray ta = context.obtainStyledAttributes(R.styleable.Gallery1);item = ta.getResourceId(R.styleable.Gallery1_android_galleryItemBackground, 0);ta.recycle();}@Overridepublic int getCount() {return imgId.length;}@Overridepublic Object getItem(int arg0) {// TODO Auto-generated method stubreturn arg0;}@Overridepublic long getItemId(int arg0) {// TODO Auto-generated method stubreturn arg0;}@Overridepublic View getView(int arg0, View arg1, ViewGroup arg2) {// TODO Auto-generated method stubImageView image = new ImageView(context);image.setImageResource(imgId[arg0]);image.setScaleType(ImageView.ScaleType.FIT_XY);image.setLayoutParams(new Gallery.LayoutParams(160,130));image.setBackgroundResource(item);return image;}}}
運行圖片:
當我們點擊第二章圖片時:
當點擊後面圖片時: