7.1.1 ImageSwitcher案例分析詳解
ImageSwitcher圖像切換器,可以切換器圖像。ImageSwitcher類的繼承圖如下:java.lang.Object
↳ android.view.View
↳ android.view.ViewGroup
↳ android.widget.FrameLayout
↳ android.widget.ViewAnimator
↳ android.widget.ViewSwitcher
↳ android.widget.ImageSwitcher
android.widget.ImageSwitcher繼承了android.widget.FrameLayout框架布局類。為了便於學習,我們把官方的ImageSwitcher例子(ApiDemos/src/com/example/android/apis/view/ImageSwitcher1.java)做了一些修改,例子運行如圖7-6屏幕,點擊屏幕下麵的縮圖,實現圖片的切換。

圖7-6 ImageSwitcher
請參考代碼清單7-4,完整代碼請參考chapter7_1工程中MyImageSwitcher代碼部分。
【代碼清單7-4】
public class MyImageSwitcher extends Activity {
private ImageSwitcher mSwitcher;
private Integer[] mThumbIds = { R.drawable.photo1_thumb,
R.drawable.photo2_thumb, R.drawable.photo3_thumb,
R.drawable.photo4_thumb, R.drawable.photo5_thumb,
R.drawable.photo6_thumb };
private Integer[] mImageIds = { R.drawable.photo1, R.drawable.photo2,
R.drawable.photo3, R.drawable.photo4, R.drawable.photo5,
R.drawable.photo6 };
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.image_switcher);
mSwitcher = (ImageSwitcher) findViewById(R.id.switcher);
mSwitcher.setFactory(new ViewSwitcher.ViewFactory() {
@Override
public View makeView() {
ImageView i = new ImageView(MyImageSwitcher.this);
i.setBackgroundColor(0xFF000000);
i.setScaleType(ImageView.ScaleType.FIT_CENTER);
i.setLayoutParams(new ImageSwitcher.LayoutParams(
LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));
return i;
}
});
Gallery g = (Gallery) findViewById(R.id.gallery);
g.setAdapter(new ImageAdapter(this));
g.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView parent, View v,
int position, long id) {
mSwitcher.setImageResource(mImageIds[position]);
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
});
… …
}
… …
}
在ImageSwitcher圖像切換器中需要提供縮圖數組集合mThumbIds和正常圖片集合mImageIds。requestWindowFeature(Window.FEATURE_NO_TITLE)方法是設置沒有標題的屏幕。
實現圖像切換關鍵代碼是mSwitcher.setFactory(new ViewSwitcher.ViewFactory() {…}),需要提供一個ViewSwitcher.ViewFactory接口為圖像切換的時候創建一個View對象,由於是圖像切換器,這個View是一個ImageView類的實例,i.setBackgroundColor(0xFF000000)指定背景顏色,i.setScaleType(ImageView.ScaleType.FIT_CENTER)指定排列方式為居中。下麵的代碼就是設置圖片的布局與父容器匹配模式:
i.setLayoutParams(new ImageSwitcher.LayoutParams( LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));
在屏幕下麵的縮圖是Gallery類型,點擊縮圖觸發事件AdapterView.OnItemSelectedListener()時改變圖片切換器的圖片源mSwitcher.setImageResource(mImageIds[position]),從而實現圖片的切換。
縮圖的Gallery還必須實現一個BaseAdapter適配器,代碼請參考代碼清單7-5,完整代碼請參考chapter7_1工程中MyImageSwitcher代碼部分。
【代碼清單7-5】
public class ImageAdapter extends BaseAdapter {
public ImageAdapter(Context c) {
mContext = c;
}
public int getCount() {
return mThumbIds.length;
}
public Object getItem(int position) {
return mThumbIds[position];
}
public long getItemId(int position) {
return position;
}
public View getView(int position, View convertView, ViewGroup parent) {
ImageView i = new ImageView(mContext);
i.setImageResource(mThumbIds[position]);
i.setAdjustViewBounds(true);
i.setLayoutParams(new Gallery.LayoutParams(
LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
i.setBackgroundResource(R.drawable.picture_frame);
return i;
}
private Context mContext;
}
getView()方法中返回縮圖的對象,i.setImageResource(mThumbIds[position])是設置圖片源,i.setAdjustViewBounds(true)設置圖片對象邊框自動調節,i.setLayoutParams()設置圖片控件的布局,i.setBackgroundResource設置背景圖片。
出自《Android開發案例驅動教程》第七章
最後更新:2017-04-02 06:51:45