2016-06-18 2 views
1

유니버설 이미지 로더에서 이미지를로드하는 데 사용하는 Html.ImageGetter 클래스가 있습니다. <img> 태그는 온라인으로 가져 오는 html json 파일에 있습니다.Html.ImageGetter 클래스에서 그려지는 이미지를 클릭하는 방법.

이미지가 제대로로드되지만 이미지가 작아지면 이미지가 장치의 너비와 일치하도록 축소되어 일부 이미지가 너무 작아 내용을 볼 수 없습니다.

내 목적은 이미지에 클릭 수신기를 설정하고 사용자가 이미지의 전체 크기를 볼 수있는 확대/축소 대화 상자를 표시하는 것이 었습니다. 현재 클릭 수를 경청하기가 어렵습니다.

이 내 ImageGetter 클래스는

public class UILImageGetter implements Html.ImageGetter{ 
    Context c; 
    TextView container; 
    UrlImageDownloader urlDrawable; 


    public UILImageGetter(View textView, Context context) { 
     this.c = context; 
     this.container = (TextView) textView; 
    } 

    @Override 
    public Drawable getDrawable(String source) { 

     urlDrawable = new UrlImageDownloader(c.getResources(), source); 

     if (Build.VERSION.SDK_INT >= 21) { 
     urlDrawable.mDrawable = c.getResources().getDrawable(R.drawable.default_thumb,null); 
     } else { 
      urlDrawable.mDrawable = c.getResources().getDrawable(R.drawable.default_thumb); 
     } 
     ImageLoader.getInstance().loadImage(source, new SimpleListener(urlDrawable)); 
     return urlDrawable; 
    } 

    private class SimpleListener extends SimpleImageLoadingListener { 
     UrlImageDownloader mUrlImageDownloader; 


     public SimpleListener(UrlImageDownloader downloader) { 
      super(); 
      mUrlImageDownloader= downloader; 
     } 

     @Override 
     public void onLoadingStarted(String imageUri, View view) { 
      Log.d("DEBUG", "onLoadingStarted called"); 
      //spinner.setVisibility(View.VISIBLE); 

     } 

     @Override 
     public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) { 
      //spinner.setVisibility(View.GONE); 

      int width = loadedImage.getWidth(); 
      int height = loadedImage.getHeight(); 

      int newWidth = width; 
      int newHeight = height; 

      if (width > container.getWidth()) { 
       newWidth = container.getWidth(); 
       newHeight = (newWidth * height)/width; 
      } 

      if (view != null) { 
       container.getLayoutParams().width = newWidth; 
       container.getLayoutParams().height = newHeight; 
      } 

      Drawable result = new BitmapDrawable(c.getResources(), loadedImage); 
      result.setBounds(0, 0, newWidth, newHeight); 

      mUrlImageDownloader.setBounds(1, 1, newWidth, newHeight); 
      mUrlImageDownloader.mDrawable = result; 
      container.invalidate(); 

      container.setText(container.getText()); 

      if (view != null) { 
       //Don't know if this is the right place to listener for clicks but it ain't working 
       view.setOnClickListener(new View.OnClickListener() { 
        @Override 
        public void onClick(View v) { 
         Log.d("TheImage", "Image Clicked"); 
        } 
       }); 
      } 

     } 

     @Override 
     public void onLoadingFailed(String imageUri, View view, FailReason failReason) { 
      String message = null; 
      switch (failReason.getType()) { 
       case IO_ERROR: 
        message = "Input/Output error"; 
        break; 
       case DECODING_ERROR: 
        message = "Image can't be decoded"; 
        break; 
       case NETWORK_DENIED: 
        message = "Downloads are denied"; 
        break; 
       case OUT_OF_MEMORY: 
        message = "Out Of Memory error"; 
        break; 
       case UNKNOWN: 
        message = "Unknown error"; 
        break; 
      } 


//   Toast.makeText(view.getContext(), message, Toast.LENGTH_SHORT).show(); 
      Log.w("UILImageGetter", message); 

      //spinner.setVisibility(View.GONE); 
     } 



    } 

    private class UrlImageDownloader extends BitmapDrawable { 
     public Drawable mDrawable; 

     public UrlImageDownloader(Resources resources, String filepath) { 
      super(resources, filepath); 
      mDrawable = new BitmapDrawable(resources, filepath); 
     } 

     @Override 
     public void draw(Canvas canvas) { 
      if (mDrawable != null) { 
       mDrawable.draw(canvas); 
      } 
     } 
    } 
} 

, 당신이 좀 도와 주 시겠어요입니까?

답변

2

이미지 자체는 클릭 할 수 없지만 사용자 정의 URLSpan에 랩핑하고 URLSpan 개의 클릭을 수신 할 수 있습니다. Html.fromHtml(...)을 사용하여 HTML을 파싱하고

Spannable html = (Spannable) Html.fromHtml(...); 
for (ImageSpan span : html.getSpans(0, html.length(), ImageSpan.class) { 
    int flags = html.getSpanFlags(span); 
    int start = html.getSpanStart(span); 
    int end = html.getSpanEnd(span); 

    html.setSpan(new URLSpan(span.getSource()) { 
     @Override public void onClick(View v) { 
      /* handle click here */ 
     } 
    }, start, end, flags); 
} 
textView.setText(html); 
textView.setMovementMethod(LinkMovementMethod.getInstance()); 
+0

감사합니다. – X09