Android Xamarin中的UIScrollVIew有什么类似的东西吗?

时间:2015-11-17 16:10:39

标签: android image xamarin

我试图创建带有图像的水平滚动视图(如照片查看器,但不是全屏)。在iOS中,您只需将子视图添加到UIScroll视图,有没有办法在Android上做同样的事情?如果有帮助,我会使用Xamarin。 我试图使用Xamarin https://components.xamarin.com/view/MultiImageView/中的multiimageview组件 但是没有要检索的当前索引,我需要选择图像编号

3 个答案:

答案 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));