2017-08-20 59 views
-1

我正在使用MaterialDrawer lib在Android中生成导航Drawer,我也试图从外部源获取图像并将其设置为DrawerItem对象中的图标为此,我使用Glide v4 lib从外部源下载图像,但不知道如何更新抽屉中每个DrawerItem中的图标占位符。这是我到目前为止已经完成:使用Glide加载MaterialDrawer Android库中的图标

@Override 
protected void onCreate(Bundle savedInstanceState) 
{ 
    ... 

    ArrayList<IDrawerItem> drawerItems = new ArrayList<IDrawerItem>(); 
    String icon = "http://myiconwebsite.com/myicon.png"; 

    //create Drawer Item obj 
    PrimaryDrawerItem primary = new PrimaryDrawerItem(); 

    //set title 
    primary.withName("Test"); 
    primary.withIdentifier(1); 
    primary.withSelectable(false); 

    //define image view for Glide 
    //I'm defining this image view so I can load the downloaded image into it so I can get the loaded image as Drawable 
    final ImageView iv = new ImageView(this); 

    //load the image in the view 
    Target rb = Glide.with(this).asDrawable().load(icon).into(iv); 

    //get the drawable object from the image view 
    Drawable dr = iv.getDrawable(); 

    //set the icon of this drawer 
    primary.withIcon(dr); 

    //add it to the list of drawers 
    drawerItems.add(primary); 

    //create our drawer 
    DrawerBuilder result = new DrawerBuilder(); 
    result.withActivity(this); 
    result.withDrawerItems (drawerItems); 

    ... 

    result.build(); 

    ... 

} 

请注意,我试图下载使用Glide的形象和加载ImageView内的图像,然后提取图像作为使用iv.getDrawable()一个Drawable对象。我这样做是因为我需要的对象是Drawable,因为这是primary.withIcon(dr)接受的方法,以便在抽屉中显示该图标。现在的问题是,当我拨打电话iv.getDrawable()它返回null并不按预期方式工作。如何实现这一目标?

我也可能在这里做错了什么?正如我在文档中看到的,他们提到像GlidePicasso这样的库可以得到支持,但他们没有添加足够的示例来说明如何实现这一点。请记住,我对Java和Glide仍然很陌生,因此我不确定是否需要这样做。

任何帮助,将不胜感激:)谢谢..

回答

0

我不会建议从UI线程服务器上加载Drawable。此外,我认为这

Target rb = Glide.with(this).asDrawable().load(icon).into(iv); 
Drawable dr = iv.getDrawable(); 

总会在访问时返回null

为了从正常抽屉项目服务器装载图标,请使用DrawerImageLoader执行如图所示的样品的剖面中(你可能需要做小的调整为V4滑行API改变了很多)

为了能够从普通物品的服务器加载图标,您必须添加CustomDrawerItem,因为默认情况下不支持此功能。该示例应用程序具有可用于例如实施示例:

https://github.com/mikepenz/MaterialDrawer/blob/develop/app/src/main/java/com/mikepenz/materialdrawer/app/drawerItems/CustomUrlPrimaryDrawerItem.java

+0

感谢我终于想通了这一点,虽然这将是很好的有一个内置的所有默认drawerItem对象。我有点不喜欢创建新类来扩展基础DrawerItem以支持每个DrawerItem类型的此功能。也许我只是懒惰。但我喜欢保持清洁,所以我使用启动画面活动预加载了所有图标,并将其绘图存储在静态哈希图中。一旦这个过程完成,它将把我带到主要活动,现在在我所做的包含抽屉的主要活动中,我将这些缓存的drawable映射到我的drawerItems并完成。 – SolidSnake

相关问题