在我的应用程序中,我正在使用tabHost Activiy.在tabhost第一个选项卡中,我正在使用TabActivity,我正在加载超过500个图像.
使用嵌套的SCroll视图:
我在recyclerview中使用了嵌套滚动视图.当加载主页时,它最初加载所有500个图像,然后显示主页.因此它会导致内存错误.
不使用嵌套的SCroll视图:
如果我删除嵌套滚动视图,一切都运行良好.滚动时逐个加载图像.它不会导致内存不足错误.
我的要求:
我需要滚动放置在recyclerview顶部的相对布局.所以我使用嵌套滚动视图.但它对我不起作用.
tab_home_layout:
<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.NestedScrollView
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
>
<LinearLayout
android:id="@+id/tab_home_activity"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
>
<RelativeLayout
android:id="@+id/home_layout_top_2_recycler"
android:layout_width="match_parent"
android:layout_height="60dp"
android:background="@drawable/layout_border"
>
<ImageView
android:id="@+id/img_user_home_tab_recycler"
android:layout_width="40dp"
android:layout_height="40dp"
android:paddingLeft="5dp"
android:paddingRight="5dp"
android:layout_centerVertical="true"
android:contentDescription="@string/cont_desc"
android:src="@drawable/profile_pic_blue" />
<TextView
android:id="@+id/tv_user_mind_home_tab_recycler"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_marginLeft="5dp"
android:layout_toRightOf="@+id/img_user_home_tab_recycler"
android:hint="@string/whats_on"
android:textColor="@color/Black"
android:textSize="@dimen/txt_size" />
</RelativeLayout>
<android.support.v7.widget.RecyclerView
android:id="@+id/rv_list_tab_home_recycler"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:scrollbars="none"
android:visibility="visible" />
</LinearLayout>
</android.support.v4.widget.NestedScrollView>
Run Code Online (Sandbox Code Playgroud)
下面我愿意分享我到目前为止所尝试的内容.
我试过这个SO帖子.但是我在tabActivity里面使用主页.所以我不能使用工具栏+协调器布局.所以这个解决方案对我没用.
然后我尝试使用多个布局 进行recyclerview.But这对我不起作用.因为relativelayout是静态的.如果我从webservice获得任何条件,我可以使用多个布局recyclerview.But我需要只是滚动视图.
我计划设置adapter.But我的web服务图像被加载从第0 position.So我不能设置在零位置在适配器静态的RelativeLayout的第0位静态RelativeLayout的.
是否有任何替代解决方案来解决这个问题.谢谢.
所以,我一直在使用这个神奇的图书馆Glide在我的画廊应用程序中显示原生图像.我使用ViewPager与FragmentStatePagerAdapter展示全尺寸的图像.寻呼机的屏幕外限制是1(默认为保存存储器).我正在使用此代码将图像加载到ViewPager我的片段中:
Glide.with(getActivity())
.loadFromMediaStore(uri)
.asBitmap()
.signature(new MediaStoreSignature(mimeType, dateModified,
.into(mImageView);
Run Code Online (Sandbox Code Playgroud)
现在,我在这里面临一些问题:
atMost()-这降低图像的质量进一步的图像已经加载RGB_565并且approximate()这也是造成OOM.如何在不获得OOM异常的情况下实现最高图像质量?对于第二个问题,我正在考虑为屏幕外项目加载质量较差的图像,然后在屏幕上显示时提高质量.可能吗?
我也试过使用ARGB_8888但结果是一样的:OOM异常.
我正在使用Glide和RecyclerView来加载许多具有不同尺寸和尺寸的图像(大约200个).
我有三个问题:
图像有时加载成功,有时应用程序崩溃给OOM.
如果图像成功加载,则滚动是滞后的.
如果我刷新布局并重新加载相同的图像,那么它会尝试加载图像但在完成之前失败并给出OOM.
以下是相关代码:
public static class MyViewHolder extends RecyclerView.ViewHolder {
@Override
public void onBindViewHolder(final MyViewHolder holder, final int listPosition) {
ImageView imageView = holder.imageView;
Glide.with(imageView.getContext())
.load(tweetMapArray.get(listPosition).get("imageURL").toString())
.diskCacheStrategy(DiskCacheStrategy.ALL)
.crossFade()
.into(imageView);
// imageURL is a valid URL for each item
}
@Override
public void onViewDetachedFromWindow(MyViewHolder holder) {
super.onViewDetachedFromWindow(holder);
Glide.clear(holder.imageView);
}
}
Run Code Online (Sandbox Code Playgroud)
请指导我做错了什么.我之前没有使用过如此多的图像.