聲明:學習的書籍《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 Context mContext; // 定義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; } // 獲取圖片ID public 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; //“下一頁”按鈕ID private static final int BUTTON_UP_ID = 0x123457; //“上一頁”按鈕ID private static final int SWITCHER_ID = 0x123458; //ImageSwitcher對象的ID public 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; } } @Override public 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); //添加元素給gridview gridview.setAdapter(new ImageAdapter(this)); gridview.setBackgroundResource(R.drawable.bg0); //事件監聽 gridview.setOnItemClickListener(new OnItemClickListener() { @Override public 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頁
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
