ImageSwitcher繼承了ViewSwitcher,所以它具備與ViewSwitcher相同的特徵:能夠在切換View組件時使用動畫效果。ImageSwitcher繼承了ViewSwitcher,並重寫了ViewSwitcher的showNext()、showPrevious()方法,所以ImageSwitcher使用起來更加簡單。使用ImageSwitcher只要以下兩步便可。android
爲ImageSwitcher提供一個ViewFactory,該ViewFactory生成的View組件必須是ImageSwitcher。瀏覽器
須要切換圖片時,只要調用ImageSwitcher的setImageDrawable(Drawable drawable)、setImageResource(int resid)和setImageURI(Uri uri)方法更換圖片便可。ide
ImageSwitcher與ImageView的功能有點類似,它們均可用於顯示圖片,區別在於ImageSwitcher的效果更炫,它能夠指定圖片切換時的動畫效果。佈局
下面經過一個實例來介紹ImageSwitcher的用法。字體
實例:支持動畫的圖片瀏覽器動畫
界面佈局文件以下。this
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center_horizontal">
<!--定義一個GridView組件-->
<GridView android:id="@+id/grid01" android:layout_width="match_parent" android:layout_height="wrap_content" android:horizontalSpacing="2dp" android:verticalSpacing="2dp" android:numColumns="4" android:gravity="center"/>
<!--定義一個ImageSwitcher組件-->
<ImageSwitcher android:id="@+id/switcher" android:layout_width="300dp" android:layout_height="300dp" android:layout_gravity="center_horizontal" android:inAnimation="@android:anim/fade_in" android:outAnimation="@android:anim/fade_out"/>
</LinearLayout>
上面的佈局文件中的黑色字代碼定義了一個ImageSwitcher,並經過android:inAnimation和android:outAnimation制定了圖片切換時的動畫效果。spa
接下來的Activity代碼須要爲該ImageSwitcher設置ViewFactory,並讓該ViewFactory的makeView()方法返回ImageView。下面是Activity的代碼。code
public class MainActivity extends AppCompatActivity { int[] imageIds = new int[]{R.drawable.bomb5, R.drawable.bomb6, R.drawable.bomb7, R.drawable.bomb8, R.drawable.bomb9, R.drawable.bomb10, R.drawable.bomb11, R.drawable.bomb12, R.drawable.bomb13, R.drawable.bomb14, R.drawable.bomb15, R.drawable.bomb16}; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //建立一個List對象,List對象的元素是Map
List<Map<String, Object>> listItems = new ArrayList(); for (int i = 0; i < imageIds.length; i++) { Map<String, Object> listItem = new HashMap<>(); listItem.put("image",imageIds[i]); listItems.add(listItem); } //獲取顯示圖片的ImageSwitcher
ImageSwitcher switcher = findViewById(R.id.switcher); //爲ImageSwitcher設置圖片切換的動畫效果 //使用Lambda表達式建立ViewFactory,表達式時makeView()方法的方法體
switcher.setFactory(() -> { //建立IamgeView對象 ImageView imageView = new ImageView(MainActivity.this); imageView.setScaleType(ImageView.ScaleType.FIT_CENTER); imageView.setLayoutParams(new FrameLayout.LayoutParams( FrameLayout.LayoutParams.WRAP_CONTENT, FrameLayout.LayoutParams.WRAP_CONTENT )); return imageView; }); //建立一個SimpleAdapter
SimpleAdapter simpleAdapter = new SimpleAdapter(this, listItems, R.layout.cell,//使用R.layout.cell爲界面佈局
new String[]{"image"}, new int[]{R.id.image1}); GridView grid = findViewById(R.id.grid01); //爲GridView設置Adapter
grid.setAdapter(simpleAdapter); //添加列表項被選中的監聽器
grid.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { @Override public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { //顯示當前被選中的圖片
switcher.setImageResource(imageIds[position]); } @Override public void onNothingSelected(AdapterView<?> parent) { } }); //添加列表項被單擊的監聽器
grid.setOnItemClickListener(((parent, view, position, id) -> { //顯示被單擊的圖片
switcher.setImageResource(imageIds[position]); })); } }
上面程序中的紅色字體代碼使用Lambda表達式實現了ViewFactory的makeView()方法,該方法返回一個ImageView對象,這樣該ImageSwitcher便可正常工做。該Activity還爲GridView綁定了事件監聽器,當用戶單擊GridView或選擇GridView的指定單元格時,ImageSwitcher切換爲顯示對應的圖片。xml
運行結果以下