聲明:學習的書籍《Android應用開發揭秘》,這裡記錄學習該書籍的日誌,引用的相關代碼與總結描述,沒有商業的用途,完全是自我學習的一個記錄,剛剛學習不可避免會出現很多問題,若是有錯誤還請大家多多批評。
繼續學習《android應用開發揭秘》這本書,這裡把基礎控制項的學習進行了分類,下面兩篇部落客要是一些常用的效果
一、 拖動效果(Gallery)
拖動效果是現在智能手機的一個不可缺少的功能,Android平台中實現拖動效果,主要是使用了Gallery控制項,Gallery英文是畫廊的意思,顧名思義存放這顯示的圖片,存放圖片資源容器是繼承自BaseAdapter類的衍生類別。當然我們也可以通過setOnItemClickListener監聽其事件。
【注意】Gallery 組件一般用於顯示映像列表,因此也可稱相簿組件 Gallery 與GridView 的區別是Gallery只能水平顯示一行,而且支援水平滑動效果。也就是說,單擊、選中或拖動Gallery 中的映像,Gallery中的映像列表會根據不同的情況向左或右移動,直到顯示最後一個映像為止.
執行個體分析:基於上述介紹,把要顯示的圖片資源索引存在一個int類型數組中,並且要顯示哪個圖片,通過setImageResource方法來設定ImageView要顯示的圖片。
關鍵源碼:
main.xml布局檔案:
<?xml version="1.0" encoding="utf-8"?><Gallery xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/Gallery01" android:layout_width="fill_parent" android:layout_height="wrap_content"/>
注意,以下ImageAdapter類繼承自BaseAdapter,並重寫其方法
public class ImageAdapter extends BaseAdapter {private ContextmContext;// 定義Context// 定義整型數組 即圖片源private Integer[]mImageIds = { R.drawable.img1, R.drawable.img2, R.drawable.img3, R.drawable.img4, R.drawable.img5, R.drawable.img6, R.drawable.img7,R.drawable.img8,};public ImageAdapter(Context c) {this.mContext = c;}//擷取圖片個數public int getCount() {return mImageIds.length;}//擷取圖片在圖庫的位置public Object getItem(int position) {return position;}// 擷取圖片IDpublic long getItemId(int position) {return position;}public View getView(int position, View convertView, ViewGroup parent{ImageView imageview = new ImageView(mContext);//給ImageView設定資源imageview.setImageResource(mImageIds[position]);//設定布局圖片120x120顯示imageview.setLayoutParams(new Gallery.LayoutParams(120,120));//設定顯示比例類型imageview.setScaleType(ImageView.ScaleType.FIT_CENTER);return imageview;}}
而實際Activity01中只要把adapter付給Gallery對象,並設定監聽事件即可“
//獲得Gallery對象Gallery g = (Gallery) this.findViewById(R.id.Gallery01);//添加ImageAdapter給Gallery對象g.setAdapter(new ImageAdapter(this));//設定Gallery對象的監聽事件g.setOnItemClickListener(new OnItemClickListener(){public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {Toast.makeText(Examples_04_17Activity.this,"你選擇了"+(arg2+1)+" 號圖片", Toast.LENGTH_SHORT).show();}});
執行個體效果:
二、 切換圖片(ImageSwitcher)
該功能類似於很多圖片瀏覽器,上一張下一張圖片進行切換,ImageSwitcher在實現該效果時,需要設定一個ViewSwitcher.ViewFactory,注意ViewSwitcher.ViewFactory是個介面,目的:在視圖轉換器(ViewSwitcher)中建立視圖。並通過makeView()方法來顯示圖片。
公用方法:public abstract View makeView ()
建立一個用於添加到視圖轉換器(ViewSwitcher)中的新視圖
關鍵源碼:
private ImageSwitcher m_Switcher; //建立ImageSwitcher對象private static int index = 0; //索引private static final int BUTTON_DOWN_ID = 0x123456; //“下一頁”按鈕IDprivate static final int BUTTON_UP_ID= 0x123457; //“上一頁”按鈕IDprivate static final int SWITCHER_ID= 0x123458; //ImageSwitcher對象的IDpublic void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); LinearLayout main_view = new LinearLayout(this); m_Switcher = new ImageSwitcher(this); //建立ImageSwitcher對象 main_view.addView(m_Switcher); //線上性布局中添加ImageSwitcher視圖 m_Switcher.setId(SWITCHER_ID); //設定ImageSwitcher對象的ID m_Switcher.setFactory(this); //設定ImageSwitcher對象的資料來源 m_Switcher.setImageResource(imagelist[index]); setContentView(main_view); //設定顯示上面建立的線性布局 Button next = new Button(this); //建立“下一張”按鈕 next.setId(BUTTON_DOWN_ID); next.setText("下一張"); next.setOnClickListener(this); LinearLayout.LayoutParams param = new LinearLayout.LayoutParams(100, 100); main_view.addView(next, param); Button pre = new Button(this); //建立“上一張”按鈕pre.setId(BUTTON_UP_ID);pre.setText("上一張");pre.setOnClickListener(this);main_view.addView(pre, param); }//事件監聽、處理public void onClick(View v) {switch(v.getId()){case BUTTON_DOWN_ID: //下一頁index++;if (index >= imagelist.length){index = 0;}//ImageSwitcher對象資源索引m_Switcher.setImageResource(imagelist[index]);break; case BUTTON_UP_ID: //上一頁index--;if (index < 0){index = imagelist.length - 1;}//ImageSwitcher對象資源索引m_Switcher.setImageResource(imagelist[index]);break;default:break;}}@Overridepublic View makeView() {return new ImageView(this); //將所有圖片通過ImageView來顯示}
【擴充點】ViewSwitcher
一、結構
public class ViewSwitcher extends ViewAnimator
Java.lang.Object
android.view.View
android.view.ViewGroup
android.widget.FrameLayout
android.widget.ViewAnimator
android.widget.ViewSwitcher
已知直接子類:ImageSwitcher, TextSwitcher
二、概述
在兩個視圖間轉換時顯示動畫,有一個可以建立這些視圖的工廠類。你可以用工廠來建立這些視圖,也可以自己建立。一個ViewSwitcher只允許包含兩個子視圖,且一次僅能顯示一個。
(譯者註:與ViewFlipper類相似,但該類不常用,常用其兩個子類ImageSwitcher:轉換圖片時增加動畫效果; TextSwitcher: 轉換文字時增加動畫效果; 其執行個體見apidemos中ImageSwitcher執行個體和TextSwitcher執行個體)
三、內部類
interface ViewSwitcher.ViewFactory
在一個ViewSwitcher裡建立視圖
…………….
五、公用方法
public void setFactory (ViewSwitcher.ViewFactory factory)
設定用來產生將在視圖轉換器中切換的兩個視圖的工廠。也可以調用兩次 addView(android.view.View, int, android.view.ViewGroup.LayoutParams)來替代使用工廠的方法。
參數: factory 用來產生轉換器內容的視圖工廠
引用自:http://dev.10086.cn/cmdn/wiki/index.php?doc-view-4764.html
執行個體效果:
三、網格視圖(GridVIew)
網格視圖的相片順序與矩陣類似,它所需要顯示元素同樣適用BaseAdapter來實現,適用方法,類似於Gallery控制項
關鍵代碼:
//取得GridView對象GridView gridview = (GridView) this.findViewById(R.id.gridview);//添加元素給gridviewgridview.setAdapter(new ImageAdapter(this));gridview.setBackgroundResource(R.drawable.bg0);//事件監聽gridview.setOnItemClickListener(new OnItemClickListener() {@Overridepublic void onItemClick(AdapterView<?> parent, View v, int position, long id){Toast.makeText(Activity01.this, "你選擇了" + (position + 1) + " 號圖片", Toast.LENGTH_SHORT).show();}});
四、捲軸視圖(ScrollView)
捲軸視圖主要用於,一頁資料顯示不開後,需要滾動來顯示的視圖。
執行個體分析:ScrollView定義個線性布局,線性布局中一個TextView以及一個Button,每點擊一次按鈕就增加一個線性布局。
關鍵源碼:
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/ScrollView01" android:layout_width="fill_parent" android:layout_height="wrap_content"android:scrollbars="none" >...... </ScrollView>
在按鈕點擊事件裡:
...... //改變預設焦點切換 buttonView.setOnKeyListener(mNewButtonKeyListener); //投遞一個訊息進行滾動 mHandler.post(mScrollToBottom); private Runnable mScrollToBottom = new Runnable() { @Override public void run(){ int off = mLayout.getMeasuredHeight() - mScrollView.getHeight(); if (off > 0) { mScrollView.scrollTo(0, off);//設定當前視圖滾動到的位置 } } };
今天學習到P101頁