2014-09-28 37 views
1

試圖插入和圖像使用RoundedDrawable類圓形圖像(從https://github.com/vinc3m1/RoundedImageView得到)。IonDrawable不能轉換爲android.graphics.drawable.BitmapDrawable

該圖像來自網址。如果我使用科希克杜塔的ION庫的圖像加載部分,我得到以下錯誤:

09-27 21:35:06.187: E/AndroidRuntime(12606): FATAL EXCEPTION: main 
09-27 21:35:06.187: E/AndroidRuntime(12606): Process: com.ylg.maps, PID: 12606 
09-27 21:35:06.187: E/AndroidRuntime(12606): java.lang.ClassCastException: com.koushikdutta.ion.IonDrawable cannot be cast to android.graphics.drawable.BitmapDrawable 
09-27 21:35:06.187: E/AndroidRuntime(12606): at com.ylg.otherlibs.RoudImageViewForMap.loadBitmap(RoudImageViewForMap.java:70) 
09-27 21:35:06.187: E/AndroidRuntime(12606): at com.ylg.otherslibs.RoudImageViewForMap.onDraw(RoudImageViewForMap.java:80) 
09-27 21:35:06.187: E/AndroidRuntime(12606): at android.view.View.draw(View.java:14465) 
09-27 21:35:06.187: E/AndroidRuntime(12606): at android.view.View.draw(View.java:14350) 
09-27 21:35:06.187: E/AndroidRuntime(12606): at android.view.ViewGroup.drawChild(ViewGroup.java:3103) 
09-27 21:35:06.187: E/AndroidRuntime(12606): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2940) 
09-27 21:35:06.187: E/AndroidRuntime(12606): at android.view.View.buildDrawingCache(View.java:13673) 
09-27 21:35:06.187: E/AndroidRuntime(12606): at android.view.View.buildDrawingCache(View.java:13522) 
09-27 21:35:06.187: E/AndroidRuntime(12606): at com.ylg.maps.Mapsthree.createDrawableFromView(Mapsthree.java:454) 
09-27 21:35:06.187: E/AndroidRuntime(12606): at com.ylg.maps.Mapsthree.loadFriends(Mapsthree.java:417) 
09-27 21:35:06.187: E/AndroidRuntime(12606): at com.ylg.maps.Mapsthree.access$24(Mapsthree.java:402) 
09-27 21:35:06.187: E/AndroidRuntime(12606): at com.ylg.maps.Mapsthree$LoadUsers.onPostExecute(Mapsthree.java:660) 
09-27 21:35:06.187: E/AndroidRuntime(12606): at com.ylg.maps.Mapsthree$LoadUsers.onPostExecute(Mapsthree.java:1) 
09-27 21:35:06.187: E/AndroidRuntime(12606): at android.os.AsyncTask.finish(AsyncTask.java:632) 
09-27 21:35:06.187: E/AndroidRuntime(12606): at android.os.AsyncTask.access$600(AsyncTask.java:177) 
09-27 21:35:06.187: E/AndroidRuntime(12606): at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:645) 
09-27 21:35:06.187: E/AndroidRuntime(12606): at android.os.Handler.dispatchMessage(Handler.java:102) 
09-27 21:35:06.187: E/AndroidRuntime(12606): at android.os.Looper.loop(Looper.java:136) 
09-27 21:35:06.187: E/AndroidRuntime(12606): at android.app.ActivityThread.main(ActivityThread.java:5001) 
09-27 21:35:06.187: E/AndroidRuntime(12606): at java.lang.reflect.Method.invoke(Native Method) 
09-27 21:35:06.187: E/AndroidRuntime(12606): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785) 
09-27 21:35:06.187: E/AndroidRuntime(12606): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601) 

看起來ION庫支持ImageView的不支持自定義的圖片瀏覽?有沒有人有這樣的問題,如果是這樣解決?

謝謝!

+0

我遇到了同樣的錯誤,所以我不得不搬到畢加索爲了解決它! – Pavlos 2014-09-28 02:17:50

+0

在畢加索......我有問題。實際上,我將XML轉換爲位圖,當我這樣做時,畢加索沒有在第一次正確加載圖像。我有時會得到圖像,有時候我會得到佔位符圖像。因此想嘗試不同的圖書館... – TheDevMan 2014-09-28 02:41:29

+0

嘗試滑翔試試UniversalImageLoader!有很多這樣的工作庫 – Pavlos 2014-09-28 02:49:11

回答

6

我本人來說使用Ion的回調來設置ImageViewBitmap自己,並使其圓形(或其他),則:

final ImageView imageView = (ImageView) ... 
Ion.with(context) 
    .load(url) 
    .asBitmap() 
    .setCallback(new FutureCallback<Bitmap>() { 
      @Override 
      public void onCompleted(final Exception e, final Bitmap bitmap) { 
       // check for (e != null) 
       final Bitmap circleBitmap = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(), Bitmap.Config.ARGB_8888); 
       final BitmapShader shader = new BitmapShader (bitmap, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP); 
       final Paint paint = new Paint(); 
       paint.setShader(shader); 
       final Canvas canvas = new Canvas(circleBitmap); 
       canvas.drawCircle(bitmap.getWidth()/2, bitmap.getHeight()/2, bitmap.getWidth()/2, paint); 
       // maybe bitmap.recycle() here? 
       imageView.setImageBitmap(circularBitmap); 
      } 
    }); 

這是一般的結構允許您使用Bitmap在任何你想要的方式工作。

編輯:如果您使用支持庫V4,你應該使用RoundedBitmapDrawable代替:

final RoundedBitmapDrawable roundedBitmapDrawable = RoundedBitmapDrawableFactory.create(getResources(), bitmap); 
roundedBitmapDrawable.setCornerRadius(Math.min(roundedBitmapDrawable.getMinimumWidth(), roundedBitmapDrawable.getMinimumHeight())/2.0F); 
imageView.setImageDrawable(roundedBitmapDrawable); 
+0

如果您使用Support Library v4,則應使用更新後的代碼。 – shkschneider 2015-02-19 14:18:24

相關問題