標籤:android style class blog c code
本樣本為通過媒體內容提供器擷取本機中的圖片顯示在Gallery中。
活動中簡單的初始化代碼
private void InitGallery() { Gallery gallery = FindViewById<Gallery> (Resource.Id.gallery); gallery.Adapter = new ImageAdapter (this); }
ImageAdapter 類為自己定義的適配器,繼承BaseAdapter類,其中核心代碼為GetView方法。
BaseAdapter為抽象類別必須實現指定方法,右鍵BaseAdapter類,選擇Implement Abstract Class,添加要實現的方法。
ImageAdapter 的代碼實現
public class ImageAdapter:BaseAdapter { private Context context; public ImageAdapter(Context context) { this.context = context; } #region implemented abstract members of BaseAdapter public override Java.Lang.Object GetItem (int position) { ImageCursor.MoveToPosition (position); return ImageCursor.GetString (0); } public override long GetItemId (int position) { return position; } public override View GetView (int position, View convertView, ViewGroup parent) {
//避免不斷的銷毀和建立新視圖 if (convertView == null) { ImageView imageView = new ImageView (context); ImageCursor.MoveToPosition (position); var imageUrl = ImageCursor.GetString (0); Console.WriteLine (imageUrl);
//根據輸出判斷 MediaStore.Images.Media.InterfaceConst.Data 查詢結果為圖片路徑 //imageView.SetImageURI (Android.Net.Uri.WithAppendedPath(MediaStore.Images.Media.ExternalContentUri,imageID)); imageView.SetImageURI (Android.Net.Uri.Parse(imageUrl)); imageView.SetScaleType (ImageView.ScaleType.FitCenter); return imageView; } else { return convertView as ImageView; } } public override int Count { get { return ImageCursor.Count; } } #endregion private Android.Database.ICursor imageCursor; public Android.Database.ICursor ImageCursor { get{ if (imageCursor==null) { imageCursor = GetImageCursor (); } return imageCursor; } set{ imageCursor = value; } } //查詢本機圖片 private Android.Database.ICursor GetImageCursor(){ return (context as Activity).ManagedQuery (MediaStore.Images.Media.ExternalContentUri, new string[] {MediaStore.Images.Media.InterfaceConsts.Data},null,null,null); } }
注意:一定要保證本機或者模擬器中存在圖片檔案,不然會報出No entry for content的異常。
此外學的過程中瞭解到一個Xamarin組件,地址:http://components.xamarin.com/view/xamarin.mobile,不知道效果怎麼要。