我使用MaterialDrawer lib在Android中生成导航抽屉,我也试图从外部源获取图像并将其设置为DrawerItem对象中的图标,并且我使用Glide v4 lib从外部源下载图像但不知道如何更新我在Drawer中的每个DrawerItem中的图标占位符。这是我到目前为止所做的:
@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
中,然后使用{{1}将该图片解压缩为Drawable
个对象}。我是这样做的,因为我需要iv.getDrawable()
对象作为Drawable
接受的方法,以便在抽屉中显示该图标。现在的问题是,当我致电primary.withIcon(dr)
时,它会返回iv.getDrawable()
并且没有按预期工作。怎么实现呢?
我也可能在这里做错了什么?正如我在文档中看到的,他们提到了像null
和Glide
这样的库可以得到支持,但他们没有添加足够的例子来说明如何做到这一点。请记住,我还是Java和Glide的新手,所以我不确定这是不是这样做。
答案 0 :(得分:0)
我不建议在UI线程上从服务器加载Drawable
。另外我假设这个
Target rb = Glide.with(this).asDrawable().load(icon).into(iv);
Drawable dr = iv.getDrawable();
将始终在访问时返回null
。
要从服务器加载普通抽屉项目的图标,请使用示例中显示的DrawerImageLoader
实施例(您可能需要进行小幅调整,因为v4滑动API发生了很大变化)
为了能够从服务器加载普通项目的图标,您必须添加CustomDrawerItem
,因为默认情况下不支持此项。示例应用程序有一个示例实现,可以用作例如: