2015-02-06 3 views
0

Visual Studio와 Xamarin의 플러그인 (Xamarin.Forms)을 사용하여 이식 가능한 응용 프로그램을 개발 중입니다.Xamarin Visual Studio : GridView with url

나는이 다음 줄, ImageAdapter에 교체하려고 :

http://developer.xamarin.com/recipes/android/layout/grid_view/create_a_grid_view/

이 예 내가 URL의 이미지와있는 gridview를 만들려고 해요

, 나는의 GridView이 다음 예제 해요/resources/drawables의 이미지로 완벽하게 작동하지만 URL에서 이미지를 다운로드해야합니다.

imageView.SetImageResource(thumbIds[position]); 

Android.Net.Uri url = Android.Net.Uri.Parse("http://xamarin.com/resources/design/home/devices.png"); 
imageView.SetImageURI(url); 

하지만 작동하지 않습니다.

도와주세요.

+0

오류 메시지가 표시되거나 응용 프로그램 출력 (디버그 창)에 오류를 나타내는 내용이 있습니까? 또한 [Android 프로젝트에 대한 인터넷 권한]을 설정했는지 확인하십시오 (http://developer.xamarin.com/recipes/android/general/projects/add_permissions_to_android_manifest/) – arnfada

+0

응답 해 주셔서 감사합니다. 내 앱에는 인터넷 권한이 있으며 예 '02-06 15 : 02 : 02.208 E/BitmapFactory (2116) : 스트림을 디코딩 할 수 없습니다 : java.io.FileNotFoundException : /http:/xamarin.com/resources/design/home/devices.png : 오픈 실패 : ENOENT (해당 파일 또는 디렉토리 없음)'. 02/15/02 : 02.208 I/System.out (2116) : 잘못된 비트 맵 uri에서 resolveUri이 실패했습니다. http : // xamarin.com/resources/design/home/ devices.png' –

답변

1

SetImageURI은 Android 운영체제에 고유 한 URI에서만 사용할 수 있습니다. imageView 인터넷 URL을 제공하면 u가 지정한 주소를 사용하여 휴대 전화에서 이미지를 찾으려고 시도합니다. 따라서 "No such file or directory"오류가 나타납니다.

이미지를 다운로드 한 다음 BitmapFactory을 사용하여 Android 비트 맵으로 변환해야합니다. 그런 다음 imageView.SetImageBitmap을 사용하여 이미지를 설정합니다.

private Bitmap GetBitmapFromUrl(string url) 
{ 
    using(WebClient webClient = new WebClient()) 
    { 
     byte[] bytes = webClient.DownloadData(url); 
     if(bytes != null && bytes.Length > 0) 
     { 
      return BitmapFactory.DecodeByteArray(bytes, 0, bytes.Length); 
     } 
    } 
    return null; 
} 

는 이미지 뷰

Bitmap bitmap = GetBitmapFromUrl("http://xamarin.com/resources/design/home/devices.png"); 
imageView.SetImageBitmap(bitmap); 
+0

이 작업은, 그러나'x'는'String Array [urls]'의 길이 인 gridview에서'x' 사진을 필요로합니다. 이걸로 나를 도울 수 있니? –

+0

귀하의 경우에는 적용 할 수 없지만 GridView 대신 RecyclerView를 사용하고 StaggeredGridLayoutManager를 사용하여 [this] (https://www.youtube.com/)와 같은 그리드 방식으로 이미지를 멋지게 정렬 할 수 있습니다. 시계? v = yYsO_h6I_Hw) – arnfada

0

두 작품을 접근에 이미지를 적용하려면,하지만 비동기 적으로 그것을하는 것이 좋습니다. http://javatechig.com/xamarin/asynchronous-image-loading-xamarin-android

  • 여기에 또한 자 마린 - 저장 - 응용 프로그램 이미지 도우미 https://github.com/xamarin/xamarin-store-app/blob/master/XamarinStore.Droid/Helpers/Images.cs
  • 당신이 RecyclerView는 "자 마린 전화 사용에 대한 좋은 기사를 가지고 자 마린 안드로이드

    1. 비동기 이미지로드 : 여기에 몇 가지 좋은 예를 Android - RecyclerView를 통한 시차표 그리드 레이아웃 및 Java 바인딩 없음! " http://blog.wislon.io/posts/2015/03/05/xamarin-android-staggered-grid-layout/

      그냥 viewHolder.Thumbnail.SetImageResource (Resource.Drawable.Icon); 이런 일에 대한 MyRecyclerAdapter.cs의 :

      • 동기화 방법 var에 imageBitmap = Common.GetImageBitmapFromUrl (gridItem.UrlPhoto); viewHolder.Thumbnail.SetImageBitmap (imageBitmap); viewHolder.Thumbnail.SetImageFromUrlAsync (의 GridItem;

      • 비동기 방식 (. 주요 활동부터 이미지 헬퍼 메소드를 사용하여 자 마린은 매장 - 앱 FileCache.SaveLocation = CacheDir.AbsolutePath을 설정 기억).UrlPhoto);