使用Picasso和Glide获取黑色ImageView

问题

我正在编写一个应用程序,应该有一个“幻灯片”function。 我发现这个以毕加索为基础的漂亮的图书馆 ,完全符合我的要求,而且大部分时间它都运行良好。

问题是,有时我的图像没有加载到幻灯片ImageView …它只显示一个“黑色canvas”,你可以看到下面的截图。

在这里输入图像说明

我从我的drawables从本地资源加载图像。 有时发生在纵向模式,有时在横向模式。 我使用哪个图像并不重要,有时会发生“黑度”。

编辑:我使用Android 5.0.2和4.4.2 – 它似乎并没有发生在4.4.2。 只在5.0.2上。

第二编辑:它发生在Android 5.1的Moto X 2014上。

第三次编辑:我试图加载的图片在磁盘上有45KB,分辨率为900×445。

然而,另一个编辑:我已经打开布局rects如所build议的,这些是结果:

单张幻灯片

它保持在滚动上。

在这里输入图像说明

有时,它变成白色而不是黑色(或白色,然后是黑色)。

在这里输入图像说明

我尝试过的其他东西:我的drawables位于res/drawable文件夹,当我将该文件夹中的文件更改为res/drawable-xxxhdpi滑块在5.0.2设备上工作。 跆拳道???

到目前为止,我尝试了什么

我已经尝试了不同的图像,在幻灯片上加载多个图像,甚至这个拉动请求 ,改变毕加索滑翔的lib。 似乎没有任何工作,错误似乎是随机的。

一旦我试图使用url而不是本地存储上的实际可绘制的URL,它就起作用了。 与完全相同的图像。

以下是我如何加载图像:

Fragment.java

 private SliderLayout slider; private PagerIndicator indicator; // ... private void setupSlider() { HashMap<String,Integer> file_maps = new HashMap<>(); file_maps.put("Blah",R.drawable.banner_1); file_maps.put("Bleh",R.drawable.banner_2); file_maps.put("Blih",R.drawable.banner_3); file_maps.put("Bloh",R.drawable.banner_4); for (String name : file_maps.keySet()) { DefaultSliderView dsv = new DefaultSliderView(getActivity()); dsv.description(name) .image(file_maps.get(name)) .error(R.drawable.banner_error) .empty(R.drawable.empty) .setScaleType(BaseSliderView.ScaleType.Fit) .setOnSliderClickListener(this); //add your extra information dsv.bundle(new Bundle()); dsv.getBundle() .putString("extra",name); slider.addSlider(dsv); } slider.setPresetTransformer(SliderLayout.Transformer.Default); slider.setCustomIndicator(indicator); slider.setCustomAnimation(new DescriptionAnimation()); slider.setDuration(4000); slider.addOnPageChangeListener(this); } 

fragment.xml之

 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" xmlns:custom="http://schemas.android.com/apk/res-auto" tools:context="com.example.fragments.Fragment" android:layout_width="wrap_content" android:layout_height="wrap_content"> <ScrollView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/sv_main"> <RelativeLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/rl_main"> <com.daimajia.slider.library.SliderLayout android:id="@+id/slider" android:layout_width="match_parent" android:layout_height="200dp" /> <com.daimajia.slider.library.Indicators.PagerIndicator android:id="@+id/custom_indicator" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentEnd="true" android:layout_alignParentRight="true" android:layout_below="@+id/slider" custom:shape="oval" custom:selected_color="#00BFA5" custom:unselected_color="#55333333" custom:selected_padding_left="@dimen/spacing_medium" custom:selected_padding_right="@dimen/spacing_medium" custom:selected_padding_top="3dp" custom:selected_padding_bottom="@dimen/spacing_small" custom:unselected_padding_left="@dimen/spacing_medium" custom:unselected_padding_right="@dimen/spacing_medium" custom:unselected_padding_top="@dimen/spacing_small" custom:unselected_padding_bottom="4dp" custom:selected_width="@dimen/spacing_medium" custom:selected_height="@dimen/spacing_medium" custom:unselected_width="6dp" custom:unselected_height="6dp" /> <LinearLayout android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_below="@+id/custom_indicator" android:id="@+id/ll_main_body"> </LinearLayout> </RelativeLayout> </ScrollView> <!-- Other stuff --> </RelativeLayout> 

我正在关注来自libs wiki页面 的教程 。 LogCat上没有出现任何错误,这使得解决这个问题变得更加困难。

有任何想法吗?

创build资源文件夹在该文件夹中命名为drawable-nodpi将您的图像,而不是不同的文件夹或可绘制的文件夹。

您是否尝试过使用ViewPagerImageView并将一组图像URI传递给适配器? 我认为如果你自己实现它,你将能够避免/debugging好得多。

这个库对我来说工作的很好,我第一次使用它。 这是一个非常好的图书馆。

第一

SliderLayout不被任何东西引用。 这就是魔术发生的地方。 制作一个xml布局,并通过SliderLayout引用它。 之后,不要忘记调用startAutoScroll()和onPause()stopAutoScroll()。

https://github.com/daimajia/AndroidImageSlider/wiki/Start-Using

上面的链接基本上都是你需要的。

第二

问题也可能是它在一个scrollView中。 滚动callback可能是行为不端。

做一个简单的布局,从一个简单的滑块开始,用自定义工作。

祝你好运。