【android基礎學習之六】——常用效果1

來源:互聯網
上載者:User

 聲明:學習的書籍《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頁

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.