Android百議程序:GridView實現相簿效果

來源:互聯網
上載者:User

標籤:android   blog   http   io   ar   os   使用   sp   java   

本章使用GridView控制項來做一個相簿效果。

圖片效果如下:


響應點擊事件,點擊的時候提示是當前第幾章圖片,從左至右,從上到下。


點擊了第一張圖片,顯示了1.

步驟:

一 建立項目,然後把圖片資源拷貝到res/drawable/檔案夾中,如果沒有drawable這個檔案夾也不要緊,可以直接建立這個檔案夾,然後在Eclipse項目中重新整理,就會在項目中顯示出來了

二 然後在Layout的介面xml檔案activity_main.xml(當然也可以隨意自己喜歡命名),輸入如下代碼:

<?xml version="1.0" encoding="utf-8"?><GridView xmlns:android="http://schemas.android.com/apk/res/android"    android:id="@+id/gridview"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:columnWidth="90dp"    android:numColumns="auto_fit"    android:verticalSpacing="10dp"    android:horizontalSpacing="10dp"    android:stretchMode="columnWidth"    android:gravity="center"/>
沒什麼特別的,就是設定好行寬,然後自動排好行數numColumns="auto_fit",這個好像是Android自動排文的。

三 activity_main.xml對應的java檔案MainActivity.java輸入邏輯代碼,主要是修改onCreate這個函數就可以了,其他就預設可以了,不用管:

@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);GridView gridview = (GridView) findViewById(R.id.gridview);gridview.setAdapter(new ImageAdapter(this));gridview.setOnItemClickListener(new OnItemClickListener() {public void onItemClick(AdapterView<?> parent, View v,int position, long id) {Toast.makeText(MainActivity.this, "" + (position+1),Toast.LENGTH_SHORT).show();}});}

主要是設定好監聽GridView對象的ItemClickListener就可以了。Toast可以理解為一個輕量的提示對話方塊,就是中顯示1的一個小對話方塊,顯示大概1秒多就自動消失。

小技巧:

不知道對象屬於那些標頭檔?例如OnItemClickListener是屬於什麼檔案庫啊?

這個有時候是個頭疼的問題,尤其是使用VC寫C++的時候,需要自己動手去查,頭疼的是,查到了這個函數,或者類之後,居然沒提示需要include什麼標頭檔,不過到了Java,似乎那都不是事了,一個快速鍵搞定了:ctrl+shift+o;那麼就會全自動包括所有需要的庫了。


四 之後建立一個Java類,放在MainActivity.java一個目錄下,然後添加代碼:

package su.gridview.hellogridview;import android.content.Context;import android.view.View;import android.view.ViewGroup;import android.widget.BaseAdapter;import android.widget.GridView;import android.widget.ImageView;public class ImageAdapter extends BaseAdapter {private Context mContext;public ImageAdapter(Context c) {mContext = c;}public int getCount() {return mThumbIds.length;}public Object getItem(int position) {return null;}public long getItemId(int position) {return 0;}// create a new ImageView for each item referenced by the Adapterpublic View getView(int position, View convertView, ViewGroup parent) {ImageView imageView;if (convertView == null) { // if it's not recycled, initialize some// attributesimageView = new ImageView(mContext);imageView.setLayoutParams(new GridView.LayoutParams(85, 85));imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);imageView.setPadding(8, 8, 8, 8);} else {imageView = (ImageView) convertView;}imageView.setImageResource(mThumbIds[position]);return imageView;}// references to our imagesprivate Integer[] mThumbIds = { R.drawable.x0, R.drawable.x1,R.drawable.x2, R.drawable.x3, R.drawable.x4, R.drawable.x5,R.drawable.x10, R.drawable.x9, R.drawable.x8, R.drawable.x7,R.drawable.x6, R.drawable.x5, R.drawable.x11, R.drawable.x20,R.drawable.x13, R.drawable.x14, R.drawable.x15, R.drawable.x16,R.drawable.x17, R.drawable.x18, R.drawable.x19, R.drawable.x20 };}
本例沒用的函數都是因為必須需要複寫BaseAdapter類的。

主要使用了getCount和getView這兩個函數。按照他的樣式實現就可以了,具體的低層工作就是由Adapter類自動調用的,調用getCount,Adapter就知道有多少資來源物件需要顯示了,調用getView就可以把圖片資源顯示出來,其中傳入convertView是為了加速,複用之前用過的View。

這個是我的理解,更加詳細的原理還有待有空參考一下原始碼吧。

參考資料:http://developer.android.com/guide/topics/ui/layout/gridview.html

第二章完成,感覺Android寫程式實在是太方便了,難怪Android大行其道啊,對比一個DirectX這些API的用法,簡直就是傻瓜式的。尤其令我想起之前使用Direct2D,微軟真的傻了,都什麼年頭了,居然還出Direct2D這麼難用的API。呵呵,別說我黑微軟;最近聽說VC居然要支援Android了,感覺微軟是低下了高貴的頭了,支援了競爭者的東西;同時也想趕上Android的步伐,不是犧牲色相啊。戰略需要,是應該低下頭的。


Android百議程序:GridView實現相簿效果

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.