圖片切換器(ImageSwitcher)的功能與用法

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

運行結果以下

 

 

相關文章
相關標籤/搜索