Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android百日程序:GridView實現相冊效果

Android百日程序:GridView實現相冊效果

編輯:關於Android編程

本章使用GridView控件來做一個相冊效果。

圖片效果如下:

\

響應點擊事件,點擊的時候提示是當前第幾章圖片,從左到右,從上到下。<喎?/kf/ware/vc/" target="_blank" class="keylink">vcD4KPHA+PGltZyBzcmM9"/uploadfile/Collfiles/20141121/2014112109063096.jpg" width="150" height="230" alt="\">

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

步驟:

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

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


沒什麼特別的,就是設置好行寬,然後自動排好行數numColumns="auto_fit",這個好像是Android自動排列的。

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

	@Override
	protected 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 Adapter
	public View getView(int position, View convertView, ViewGroup parent) {
		ImageView imageView;
		if (convertView == null) { // if it's not recycled, initialize some
									// attributes
			imageView = 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 images
	private 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的步伐,不是犧牲色相啊。戰略需要,是應該低下頭的。


  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved