直接上代码
1.Layout——Main.axml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:minWidth="25px"
android:minHeight="25px">
<TextView
android:text="@string/Welcome"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/textView1" />
<Gallery
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/gallery1" />
</LinearLayout>
2.Activity1.cs
using System;
using Android.App;
using Android.Content;
using Android.Runtime;
using Android.Views;
using Android.Widget;
using Android.OS;
using Android.Database;
using Android.Provider;
namespace GalleryViewDemo
{
[Activity(Label = "Gallery View Sample", MainLauncher = true, Icon = "@drawable/icon")]
public class GalleryViewSample : Activity
{
protected override void OnCreate(Bundle bundle)
{
base.OnCreate(bundle);
// Set our view from the "main" layout resource
SetContentView(Resource.Layout.Main);
CreateGallery();
}
private void CreateGallery()
{
Gallery g = this.FindViewById<Gallery>(Resource.Id.gallery1);
g.Adapter = new ImageAdapter(this);
}
}
}
3.ImageAdapter.cs
using System; using System.Collections.Generic; using System.Linq; using System.Text; using Android; using Android.App; using Android.Content; using Android.OS; using Android.Runtime; using Android.Views; using Android.Widget; using Android.Database; using Android.Provider; namespace GalleryViewDemo { public class ImageAdapter : BaseAdapter { Context _Context; ICursor _ImageCursor; protected ICursor ImageCursor { get { if (_ImageCursor == null) { _ImageCursor = GetImageCursor(); } return _ImageCursor; } set { _ImageCursor = value; } } public ImageAdapter(Context c) { _Context = c; } private ICursor GetImageCursor() { string[] Projection = { MediaStore.Images.Thumbnails.ImageId }; var ImageCursor = ((Activity)_Context).ManagedQuery(MediaStore.Images.Thumbnails.ExternalContentUri, Projection, null, null, null); return ImageCursor; } public override int Count { get { return ImageCursor.Count; } } public override Java.Lang.Object GetItem(int position) { return position; } public override long GetItemId(int position) { ImageCursor.MoveToPosition(position); var ImageId = ImageCursor.GetString(0); return position; } public override View GetView(int position, View convertView, ViewGroup parent) { if (convertView == null) { ImageView ReturnView = new ImageView(_Context); ImageCursor.MoveToPosition(position); var ImageId = ImageCursor.GetString(0); ReturnView.SetImageURI(Android.Net.Uri.WithAppendedPath(MediaStore.Images.Thumbnails.ExternalContentUri, ImageId)); ReturnView.SetScaleType(ImageView.ScaleType.CenterCrop); return ReturnView; } else { return(ImageView) convertView; } } } }
在模拟器中,先下载了两幅图片,运行成功。
在手机上运行失败,尚不知道原因,求解。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)