ImageSwitcher是用于图片浏览以及上下图片的切换显示它的内部包含有两个ImageView
一丶效果预览:
二丶如何实现
1xml源码:
<RelativeLayout 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:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >
<ImageSwitcher
android:id="@+id/imageSwitcher"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_alignParentTop="true"
android:layout_alignParentBottom="true"
android:inAnimation="@android:anim/slide_in_left"
android:outAnimation="@android:anim/slide_out_right"/>
<Gallery
android:id="@+id/gallery"
android:layout_width="match_parent"
android:layout_height="60dp"
android:layout_alignParentBottom="true"
android:layout_alignParentLeft="true"
android:gravity="center_vertical"
android:spacing="16dp"/>
</RelativeLayout>
上面的ImageSwitcher中最后两句的代码是设置图片进入和进出的样式,好让图片进入和进出不显得那么生硬
2 ImgeSwitche使用工厂类创建的 先看(ViewFactory)中的源码
public void setFactory(ViewFactory factory) {
mFactory = factory;
obtainView();
obtainView();
}
上面的obtainView()方法被调用了2次创建了2个ImageView
Activity中的代码:
package com.example.android_rimageswitcher02;
import android.os.Bundle;
import android.app.Activity;
import android.content.Context;
import android.view.Menu;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.BaseAdapter;
import android.widget.Gallery;
import android.widget.ImageSwitcher;
import android.widget.ImageView;
import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.ImageView.ScaleType;
import android.widget.ViewSwitcher.ViewFactory;
public class MainActivity extends Activity implements ViewFactory,OnItemSelectedListener{
private ImageSwitcher switcher;
private Gallery gallery;
private int[] imagesId={
R.drawable.mv,
R.drawable.switcher1,
R.drawable.switcher2,
R.drawable.switcher3,
R.drawable.switcher4,
R.drawable.switcher5,
R.drawable.switcher6
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
switcher=(ImageSwitcher)findViewById(R.id.imageSwitcher);
gallery=(Gallery)findViewById(R.id.gallery);
switcher.setFactory(this);
gallery.setOnItemSelectedListener(this);
gallery.setAdapter(new MyAdapter(this));
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public View makeView() {
//System.out.println("View*****start");
ImageView iv=new ImageView(this);
iv.setBackgroundColor(0xff000000);
iv.setScaleType(ScaleType.FIT_CENTER);
//iv.setImageResource(imagesId[index]);
System.out.println("View*****start");
return iv;
}
class MyAdapter extends BaseAdapter{
private Context context;
public MyAdapter(Context context){
this.context=context;
}
@Override
public int getCount() {
return imagesId.length;
}
@Override
public Object getItem(int position) {
return position;
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ImageView iv=new ImageView(this.context);
iv.setImageResource(imagesId[position]);
iv.setAdjustViewBounds(true);
iv.setScaleType(ScaleType.FIT_CENTER);
return iv;
}
}
// int index=0;
@Override
<span style="color:#ff0000;">public void onItemSelected(AdapterView<?> parent, View view, int position,
long id)</span> {
//System.out.println("onItemSelected*******"+position+"*******stat" + index);
//if(index>0)
<span style="color:#ff0000;">switcher.setImageResource(imagesId[position])</span>;
//System.out.println("onItemSelected*******"+position+"********end" + index);
//index++;
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
// TODO Auto-generated method stub
}
}
注意标记中的方法(如果不显示就是<span>中的代码 在 onItemSelect方法中和makeView方法中)按照开始的时候我们根本没有触发onItemSelect事件但是,程序在一开始执行的时候自动执行onItemSelected方法
我已经试过了不仅如此就连Spinner如果你设置onItemselsect事件它也会在一开始的时候自动执行