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


ImageSwitcher繼承了ViewSwitcher,因此它具有與ViewSwitcher相同的特征:可以在切換View組件時使用動畫效果。ImageSwitcher繼承了ViewSwitcher,並重寫了ViewSwitcher的showNext()、showPrevious()方法,因此ImageSwitcher使用起來更加簡單。使用ImageSwitcher只要如下兩步即可。

為ImageSwitcher提供一個ViewFactory,該ViewFactory生成的View組件必須是ImageSwitcher。

需要切換圖片時,只要調用ImageSwitcher的setImageDrawable(Drawable drawable)、setImageResource(int resid)和setImageURI(Uri uri)方法更換圖片即可。

ImageSwitcher與ImageView的功能有點相似,它們都可用於顯示圖片,區別在於ImageSwitcher的效果更炫,它可以指定圖片切換時的動畫效果。

下面通過一個實例來介紹ImageSwitcher的用法。

實例:支持動畫的圖片瀏覽器

界面布局文件如下。

<?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制定了圖片切換時的動畫效果。

接下來的Activity代碼需要為該ImageSwitcher設置ViewFactory,並讓該ViewFactory的makeView()方法返回ImageView。下面是Activity的代碼。

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切換為顯示對應的圖片。

運行結果如下

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM