我试图创建带有图像的水平滚动视图(如照片查看器,但不是全屏)。在iOS中,您只需将子视图添加到UIScroll视图,有没有办法在Android上做同样的事情?如果有帮助,我会使用Xamarin。 我试图使用Xamarin https://components.xamarin.com/view/MultiImageView/中的multiimageview组件 但是没有要检索的当前索引,我需要选择图像编号
答案 0 :(得分:0)
除了仅适用于垂直滚动的Android ScrollView外,您还有HorizontalScrollView
。
小心你的记忆。在Android中,您需要确保在图像离开屏幕时释放图像。像UniversalImageLoader或Picasso这样的图书馆对此很有帮助,但我不知道你是否可以将它们包含在Xamarin中。
答案 1 :(得分:0)
如果您使用的是xml布局,则可以使用以下
<HorizontalScrollView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:fillViewport="true"
android:scrollbars="horizontal|vertical" >
您也可以通过代码执行完全相同的操作(请参阅参考https://developer.xamarin.com/api/type/Android.Widget.HorizontalScrollView/)。
最后,如果您使用的是Xamarin.Forms,您可以使用已在所有平台上实现的ScrollView,您可以设置&#34; Orientation&#34;。 (见参考https://developer.xamarin.com/api/type/Xamarin.Forms.ScrollView/)
答案 2 :(得分:0)
确保创建图像的缩略图版本,否则当您拥有多个图像时,您将开始遇到内存和性能问题。这是来自我自己的应用程序的代码,其子类BaseAdapter&lt;&gt;并在列表中显示照片和其他内容。我正在列表适配器中进行大小调整,但没有理由不能先完成或缓存然后重用。
// get the a photo item based on list position
var item = items[position];
// just getting photo info from my list of photos
var info = item.Data.Photos[0];
var options = new BitmapFactory.Options() { InJustDecodeBounds = true };
BitmapFactory.DecodeFile(info.Filename, options);
// Raw height and width of image
var height = options.OutHeight;
var width = options.OutWidth;
int inSampleSize = 1;
var viewWidth = 100;
var viewHeight = 100;
if (height > viewHeight || width > viewWidth)
{
// Calculate ratios of height and width to requested height and width
var heightRatio = (int)Math.Round((float)height / (float)viewHeight);
var widthRatio = (int)Math.Round((float)width / (float)viewWidth);
// Choose the smallest ratio as inSampleSize value, this will guarantee
// a final image with both dimensions larger than or equal to the
// requested height and width.
inSampleSize = heightRatio < widthRatio ? heightRatio : widthRatio;
}
options.InSampleSize = inSampleSize;
options.InJustDecodeBounds = false;
image.SetImageBitmap(BitmapFactory.DecodeFile(info.Filename, options));