本文來自http://blog.csdn.net/hellogv/ ,引用必須註明出處!
上次講了如何使用Gallery控制項,這次就講Gallery 與ImageSwitcher的結合使用,本文實現一個簡單的瀏覽圖片的功能。先貼出程式運行:
除了Gallery可以拖拉切換圖片,我在ImageSwitcher控制項加入了setOnTouchListener事件實現,使得ImageSwitcher也可以在拖拉中切換圖片。本例子依然使用JAVA的反射機制來自動讀取資源中的圖片。
main.xml的源碼如下:
<?xml version="1.0" encoding="utf-8"?><br /><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"<br /> android:layout_width="match_parent"<br /> android:layout_height="match_parent"> </p><p> <ImageSwitcher android:id="@+id/switcher"<br /> android:layout_width="match_parent" android:layout_height="match_parent"/></p><p> <Gallery android:id="@+id/gallery"<br /> android:background="#55000000"<br /> android:layout_width="match_parent"<br /> android:layout_alignParentBottom="true"<br /> android:layout_alignParentLeft="true"</p><p> android:gravity="center_vertical"<br /> android:spacing="16dp" android:layout_height="100dp"/><br /></RelativeLayout></p><p>
程式的源碼如下:
package com.testImageView;<br />import java.lang.reflect.Field;<br />import java.util.ArrayList;<br />import android.app.Activity;<br />import android.content.Context;<br />import android.os.Bundle;<br />import android.view.MotionEvent;<br />import android.view.View;<br />import android.view.View.OnTouchListener;<br />import android.view.ViewGroup;<br />import android.view.animation.AnimationUtils;<br />import android.widget.AdapterView;<br />import android.widget.BaseAdapter;<br />import android.widget.Gallery;<br />import android.widget.ImageSwitcher;<br />import android.widget.ImageView;<br />import android.widget.AdapterView.OnItemSelectedListener;<br />import android.widget.Gallery.LayoutParams;<br />import android.widget.ViewSwitcher.ViewFactory;<br />public class testImageView extends Activity implements ViewFactory {<br />private ImageSwitcher is;<br />private Gallery gallery;<br />private int downX,upX;<br /> private ArrayList<Integer> imgList=new ArrayList<Integer>();//映像ID</p><p>@Override<br />protected void onCreate(Bundle savedInstanceState) {<br />// TODO Auto-generated method stub<br />super.onCreate(savedInstanceState);<br />setContentView(R.layout.main);<br /> //用反射機制來擷取資源中的圖片ID<br /> Field[] fields = R.drawable.class.getDeclaredFields();<br /> for (Field field : fields)<br /> {<br /> if (!"icon".equals(field.getName()))//除了icon之外的圖片<br /> {<br /> int index = 0;<br />try {<br />index = field.getInt(R.drawable.class);<br />} catch (IllegalArgumentException e) {<br />// TODO Auto-generated catch block<br />e.printStackTrace();<br />} catch (IllegalAccessException e) {<br />// TODO Auto-generated catch block<br />e.printStackTrace();<br />}<br /> //儲存圖片ID<br /> imgList.add(index);<br /> }<br /> }</p><p> //設定ImageSwitcher控制項<br />is = (ImageSwitcher) findViewById(R.id.switcher);<br />is.setFactory(this);<br />is.setInAnimation(AnimationUtils.loadAnimation(this,<br />android.R.anim.fade_in));<br />is.setOutAnimation(AnimationUtils.loadAnimation(this,<br />android.R.anim.fade_out));<br />is.setOnTouchListener(new OnTouchListener(){<br />/*<br /> * 在ImageSwitcher控制項上滑動可以切換圖片<br /> */<br />@Override<br />public boolean onTouch(View v, MotionEvent event) {<br />if(event.getAction()==MotionEvent.ACTION_DOWN)<br />{<br />downX=(int) event.getX();//取得按下時的座標<br />return true;<br />}<br />else if(event.getAction()==MotionEvent.ACTION_UP)<br />{<br />upX=(int) event.getX();//取得鬆開時的座標<br />int index=0;<br />if(upX-downX>100)//從左拖到右,即看前一張<br />{<br />//如果是第一,則去到尾部<br />if(gallery.getSelectedItemPosition()==0)<br /> index=gallery.getCount()-1;<br />else<br />index=gallery.getSelectedItemPosition()-1;<br />}<br />else if(downX-upX>100)//從右拖到左,即看後一張<br />{<br />//如果是最後,則去到第一<br />if(gallery.getSelectedItemPosition()==(gallery.getCount()-1))<br />index=0;<br />else<br />index=gallery.getSelectedItemPosition()+1;<br />}<br />//改變gallery圖片所選,自動觸發ImageSwitcher的setOnItemSelectedListener<br />gallery.setSelection(index, true);<br />return true;<br />}<br />return false;<br />}</p><p>});</p><p>//設定gallery控制項<br />gallery = (Gallery) findViewById(R.id.gallery);<br />gallery.setAdapter(new ImageAdapter(this));<br />gallery.setOnItemSelectedListener(new OnItemSelectedListener(){<br />@Override<br />public void onItemSelected(AdapterView<?> arg0, View arg1,<br />int position, long arg3) {<br />is.setImageResource(imgList.get(position));<br />}<br />@Override<br />public void onNothingSelected(AdapterView<?> arg0) {<br />// TODO Auto-generated method stub<br />}</p><p>});<br />}<br />//設定ImgaeSwitcher<br />@Override<br />public View makeView() {<br />ImageView i = new ImageView(this);<br />i.setBackgroundColor(0xFF000000);<br />i.setScaleType(ImageView.ScaleType.CENTER);//置中<br />i.setLayoutParams(new ImageSwitcher.LayoutParams(//自適應圖片大小<br />LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));<br />return i;<br />}<br />public class ImageAdapter extends BaseAdapter {<br />public ImageAdapter(Context c) {<br />mContext = c;<br />}<br />public int getCount() {<br />return imgList.size();<br />}<br />public Object getItem(int position) {<br />return position;<br />}<br />public long getItemId(int position) {<br />return position;<br />}<br />public View getView(int position, View convertView, ViewGroup parent) {<br />ImageView i = new ImageView(mContext);<br />i.setImageResource(imgList.get(position));<br />i.setAdjustViewBounds(true);<br />i.setLayoutParams(new Gallery.LayoutParams(<br />LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));<br />return i;<br />}<br />private Context mContext;<br />}</p><p>}<br />